我在一个可以启动其他Android应用程序的自助服务终端应用程序上工作.它运行在锁屏顶部.我看到的问题是锁屏在活动之间短暂显示.我们必须锁定平板电脑,因此解锁不是一种选择.
我已经能够用一个超级简单的案例重现这一点.这两项活动几乎相同.该应用程序是设备管理员,可以显示在键盘锁上方.我也尝试过根本没用finish(),但是没有解决这个问题.
public class MainActivity extends Activity {
private Handler h = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bneg1 = (Button) findViewById(R.id.bneg1);
bneg1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
h.post(new Runnable() {
@Override
public void run() {
Intent i = new Intent(MainActivity.this, SecondActivity.class);
startActivity(i);
finish();
}
});
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
如果没有先短暂显示锁屏,我该如何启动其他活动?
我Couldn't use the admin app due to a checksum error. Contact your IT department在使用下面的代码时收到消息.基本上你有两个Android Lollipop设备.一个设备未设置(恢复出厂设置),另一个设备上有此编程应用程序.编程应用程序向未设置的设备发送NFC命令,告诉它使用您传递给它的数据开始配置.根据DevicePolicyManager,需要三个字段(APK位置,APK文件校验和和包名称).MIME_TYPE_PROVISIONING_NFC.
APK正在下载.我正在检查我的服务器日志,它显然来自设备(AndroidDownloadManager在用户代理中).
根据DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM它是文件的SHA-1校验和.校验和不匹配.我已经尝试了许多不同格式的校验和(十六进制,带有空格的十六进制,大写/小写,base64,文本),我想我可能错过了一个测试.
不幸的是,Android Lollipop源代码尚不可用,否则我会在那里查看.
我该如何解决?有什么想法吗?
public class ProvisionerActivity extends Activity implements CreateNdefMessageCallback {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
mNfcAdapter.setNdefPushMessageCallback(this, this);
}
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
try {
Properties p = new Properties();
p.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, "com.example.deviceownertest");
p.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION, "http://example.com/DeviceOwnerTest.apk");
p.setProperty(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM, "19138948d8a607617971af724ffd08dd7eab771b");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStream out = new ObjectOutputStream(bos); …Run Code Online (Sandbox Code Playgroud) 我目前有一个周期性的问题,IllegalArgumentException我打电话给我Activity.startLockTask().我的应用程序安装了设备所有者应用程序,允许我的程序包自动固定自己.
下面的代码是检查以确保我的包可以锁定自己.如果它可以,那么它自己固定.
码:
if (dpm.isLockTaskPermitted(getPackageName())) {
super.startLockTask();
}
Run Code Online (Sandbox Code Playgroud)
logcat的:
java.lang.IllegalArgumentException: Invalid task, not in foreground
at android.os.Parcel.readException(Parcel.java:1544)
at android.os.Parcel.readException(Parcel.java:1493)
at android.app.ActivityManagerProxy.startLockTaskMode(ActivityManagerNative.java:5223)
at android.app.Activity.startLockTask(Activity.java:6163)
Run Code Online (Sandbox Code Playgroud)
问题是我的应用需要偶尔重启自己.因此,我们取消固定,完成活动并使用新任务重新启动它,然后退出我们的流程.当活动恢复时,它试图固定自己 - 有时它有效 - 有时它不会.我相信我们如何重新启动可能是抛出异常的原因,但它应该无关紧要,因为新活动是在前台并且是IS重点.
一旦活动失败,它就会继续失败,只要它尝试:如果我坐在那里尝试每5秒固定一次任务,它每次都会继续失败.我试着钉扎onCreate,onWindowFocusChanged,onResume,和onStart.
有谁知道问题可能是什么?
供参考:
8853行:https://android.googlesource.com/platform/frameworks/base/+/android-5.0.2_r1/services/core/java/com/android/server/am/ActivityManagerService.java
我正在开发一个需要打印的自助服务终端应用程序.我有打印功能,但问题是它显示了一个对话框,作为一个自助服务终端应用程序,我们需要保持简单并限制用户可以做什么.
有没有办法打印而不显示对话框?
我不在乎它是否打印到"默认"打印机或者是否需要将参数传递给它.
我用这个作为参考:http://developer.android.com/training/printing/html-docs.html
我正在一个移动网站上工作,该网站的"页面"有div,它占据屏幕的全尺寸,你可以在每个屏幕之间滚动.问题是,只要用户向下滚动,窗口就会调整大小,因为地址栏会隐藏.当您滚动到完整的底部并且地址栏然后隐藏时,这会导致问题.
是否可以让地址栏始终显示在移动设备上?
我正在研究在android上打印webview。我遇到了一个非法状态异常的问题。仅当我非常快地两次调用“打印”两次时,才会发生这种情况。崩溃也不在我的调用栈中,因此使用try-catch无效。
注意:我正在通过反射进行调用(如何通过KitKat 4.4打印API通过反射来打印WebView?),但是我很确定使用API会对我做同样的事情(但我最终会检查)(编辑:刚刚检查过。制作了一个带有Web视图和按钮的简单应用程序。当我两次快速单击按钮时,整个应用程序崩溃了。)
堆栈跟踪:
java.lang.IllegalStateException: printing is already pending
at com.android.org.chromium.android_webview.AwPdfExporter.exportToPdf(AwPdfExporter.java:51)
at com.android.org.chromium.android_webview.AwPrintDocumentAdapter.exportPdf(AwPrintDocumentAdapter.java:100)
at com.android.org.chromium.android_webview.AwPrintDocumentAdapter.onWrite(AwPrintDocumentAdapter.java:81)
at android.print.PrintManager$PrintDocumentAdapterDelegate$MyHandler.handleMessage(PrintManager.java:609)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4998)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
问题是:如何避免这种情况?
编辑:这是我的测试应用程序。如果在对话框出现之前单击两次按钮,则会出现上面显示的异常。在不使用“ hacky”超时的情况下如何避免这种情况。
MainActivity.java:
package com.example.test;
import android.os.Bundle;
import android.print.PrintAttributes;
import android.print.PrintDocumentAdapter;
import android.print.PrintManager;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button …Run Code Online (Sandbox Code Playgroud) java printing android android-4.4-kitkat android-print-framework
我遇到了一个非常奇怪的崩溃webview.destroy();。但是,这不是典型的可堆栈跟踪错误。它似乎扼杀了我的应用程序。我现在无法访问logcat,但它在WebViewCoreThread中显示“致命信号11”错误,并且还显示有关分段错误的大日志。
在调用webview.destroy()之前,我已经尝试了几乎所有方法。我的代码当前为:
parent.removeView(wv);
wv.stopLoading();
wv.clearAnimation();
wv.clearCache(true);
wv.clearHistory();
wv.clearSslPreferences();
wv.removeAllViews();
wv.freeMemory();
wv.destroyDrawingCache();
wv.clearFocus();
wv.destroy();
Run Code Online (Sandbox Code Playgroud)
每次都崩溃。但是,当我替换wv.destroy();为Runnable并在5秒钟后运行Runnable时,它不会崩溃。我尝试过仅以10毫秒的延迟发布它,但是它有时可行,有时却没有。无论如何,使用延迟是一种hack,我不喜欢它,因为某些设备的速度更快或更慢,并且会以不同的方式运行。似乎在WebViewCoreThread的后台发生了一些事情,wv.destroy();需要在调用之前完成它。我还需要打电话给destroy,因为webview直到您做完才真正停止做事。
这是一个问题,主要是因为在活动可见时我需要销毁Webview并创建一个全新的Webview,并且在应用程序的生命周期中可能会发生多次。
这是日志转储:另外请注意,我知道它说“在连接时仍被调用”,但我已经分离了它。这真的让我感到困惑。
E/webview ( 3271): Error: WebView.destroy() called while still attached!
D/webviewglue( 3271): nativeDestroy view: 0x71ee4d88
F/libc ( 3271): Fatal signal 11 (SIGSEGV) at 0x00750020 (code=1), thread 3285 (WebViewCoreThre)
D/dalvikvm( 2902): GC_CONCURRENT freed 378K, 5% free 9463K/9892K, paused 1ms+3ms, total 21ms
I/DEBUG (13302): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG …Run Code Online (Sandbox Code Playgroud) 我需要为特定的mime类型设置默认应用程序.我知道如何清除默认值,但我需要在没有实际打开应用程序的情况下提示用户.
PackageManager p = mContext.getPackageManager();
ComponentName cN = new ComponentName(mContext, FakeDownloadActivity.class);
p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Intent selector = new Intent(Intent.ACTION_DEFAULT);
selector.addCategory(Intent.CATEGORY_DEFAULT);
selector.setType(mimeType);
mContext.startActivity(selector);
p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)
上面的代码启动活动而不是仅选择默认活动.它可以启用虚假活动,然后禁用它.这会导致"选择默认应用程序"对话框在下次调用时显示.我只想选择默认活动.
我正在开发一个需要能够使用外部 USB 或蓝牙键盘楔的应用程序。然后我捕获 KeyEvents 并根据需要缓存它们(开始/结束标记)。
所以在这一点上,我有需要转换为字符串的 KeyEvent 列表。
所以我需要将这些有序的 KeyEvents 转换为正确的字符串。
List<KeyEvent> events = new ArrayList<KeyEvent>();
String eventString = eventsToString(events); //??????
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
android ×8
java ×2
printing ×2
css ×1
html ×1
javascript ×1
lockscreen ×1
mobile ×1
nfc ×1
webview ×1