小编Ran*_*ndy的帖子

锁屏在活动之间显示

我在一个可以启动其他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)

如果没有先短暂显示锁屏,我该如何启动其他活动?

android lockscreen android-activity

12
推荐指数
1
解决办法
1390
查看次数

配置Android Lollipop时的校验和错误

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)

android nfc android-5.0-lollipop

12
推荐指数
2
解决办法
3632
查看次数

Activity.startLockTask()偶尔会抛出IllegalArgumentException

我目前有一个周期性的问题,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

android android-5.0-lollipop android-screen-pinning

10
推荐指数
1
解决办法
3396
查看次数

隐藏Android KitKat 4.4打印对话框

我正在开发一个需要打印的自助服务终端应用程序.我有打印功能,但问题是它显示了一个对话框,作为一个自助服务终端应用程序,我们需要保持简单并限制用户可以做什么.

有没有办法打印而不显示对话框?

我不在乎它是否打印到"默认"打印机或者是否需要将参数传递给它.

我用这个作为参考:http://developer.android.com/training/printing/html-docs.html

printing android android-4.4-kitkat android-print-framework

7
推荐指数
0
解决办法
1908
查看次数

禁用在移动设备上隐藏地址栏

我正在一个移动网站上工作,该网站的"页面"有div,它占据屏幕的全尺寸,你可以在每个屏幕之间滚动.问题是,只要用户向下滚动,窗口就会调整大小,因为地址栏会隐藏.当您滚动到完整的底部并且地址栏然后隐藏时,这会导致问题.

是否可以让地址栏始终显示在移动设备上?

html javascript css mobile

6
推荐指数
1
解决办法
1万
查看次数

Android 4.4打印-“ java.lang.IllegalStateException:打印已在等待处理”

我正在研究在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

5
推荐指数
1
解决办法
1219
查看次数

WebView.Destroy()导致致命信号11崩溃

我遇到了一个非常奇怪的崩溃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)

java android webview

4
推荐指数
1
解决办法
4379
查看次数

在没有实际打开活动的情况下提示默认活动

我需要为特定的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)

上面的代码启动活动而不是仅选择默认活动.它可以启用虚假活动,然后禁用它.这会导致"选择默认应用程序"对话框在下次调用时显示.我只想选择默认活动.

android android-intent

4
推荐指数
1
解决办法
655
查看次数

将 KeyEvent 对象列表转换为字符串

我正在开发一个需要能够使用外部 USB 或蓝牙键盘楔的应用程序。然后我捕获 KeyEvents 并根据需要缓存它们(开始/结束标记)。

所以在这一点上,我有需要转换为字符串的 KeyEvent 列表。

所以我需要将这些有序的 KeyEvents 转换为正确的字符串。

List<KeyEvent> events = new ArrayList<KeyEvent>();
String eventString = eventsToString(events); //??????
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

android

2
推荐指数
1
解决办法
1471
查看次数