繁体   English   中英

Android创建启动器,但无法启动其他应用

[英]Android creating a launcher but not able to launch other apps

我在android中创建启动器。 让我解释一下情况。

情况1:当我从android studio运行myLauncher应用程序时,它首先作为普通应用程序运行。 然后,我在myLauncher中打开应用程序抽屉,然后单击图标以启动另一个应用程序,它运行正常。 退出应用程序后,我再次回到myLauncher,就像它在android堆栈上一样。 这是我想要的行为。

情况2:我的应用程序在android上安装后,按主屏幕按钮选择默认启动器,然后选择myLauncher作为默认启动器。 它会打开,然后在myLauncher中打开应用程序抽屉。 单击任何图标以启动另一个应用程序后,它将不起作用。

尽管我在Cordova工作,但是我认为问题并不是Cordova的问题,因为myLauncher未作为启动程序运行时一切正常。

Intent launchIntent = cordova.getActivity().getApplicationContext().getPackageManager().getLaunchIntentForPackage(args.get(0).toString());
cordova.getActivity().getApplicationContext().startActivity(launchIntent);

案例1的Logcat:

01-10 11:37:57.526  1555  1638 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.android.dialer cmp=com.android.dialer/.DialtactsActivity} from uid 10057 on display 0
01-10 11:37:57.526  1555  1638 W ActivityManager: Activity is launching as a new task, so cancelling activity result.
01-10 11:37:57.536  1555  1638 D         : HostConnection::get() New Host Connection established 0x7f1132abef40, tid 1638
01-10 11:37:57.545  1236  1236 E EGL_emulation: tid 1236: eglCreateSyncKHR(1370): error 0x3004 (EGL_BAD_ATTRIBUTE)
01-10 11:37:57.610  3983  3983 D CordovaInterfaceImpl: Sending activity result to plugin
01-10 11:37:57.612  1555  1638 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
01-10 11:37:57.629  3983  4017 W PluginManager: THREAD WARNING: exec() call to Apps.start blocked the main thread for 104ms. Plugin should use CordovaInterface.getThreadPool().
01-10 11:37:58.025  1555  1575 I ActivityManager: Displayed com.android.dialer/.DialtactsActivity: +333ms
01-10 11:37:58.308  3983  3983 I Choreographer: Skipped 30 frames!  The application may be doing too much work on its main thread.
01-10 11:37:58.464  3983  4025 E Surface : getSlotFromBufferLocked: unknown buffer: 0x7f11433b9d90

案例2的Logcat:

01-10 11:34:15.739  1555  1803 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.android.dialer cmp=com.android.dialer/.DialtactsActivity} from uid 10057 on display 0
01-10 11:34:15.739  1555  1803 W ActivityManager: Activity is launching as a new task, so cancelling activity result.
01-10 11:34:15.791  1555  1575 D         : HostConnection::get() New Host Connection established 0x7f1132cba040, tid 1575
01-10 11:34:16.463  1555  1575 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
01-10 11:34:16.566  1555  1638 W InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@668d511 attribute=null, token = android.os.BinderProxy@20e786d

我进行了两项更改, 现在可以使用

在清单中,我在活动中添加了android:launchMode="singleTop"和意图启动,并将其放入可运行对象中。

        cordova.getThreadPool().execute(new Runnable() {
            @Override
            public void run() {
                try {
                    Intent launchIntent = cordova.getActivity().getApplicationContext().getPackageManager().getLaunchIntentForPackage(args.get(0).toString());
                    launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    cordova.getActivity().getApplicationContext().startActivity(launchIntent);
                } catch (JSONException exp) {
                    Log.e("ERR", "JSON Error");
                } catch (Exception exp) {
                    Log.e("ERR", "Other Error: " + exp.getMessage());
                }

            }

更新:不,这不起作用。 必须混合了apk。 如果我一直快速点击应用程序图标,则该应用程序确实会立即打开和关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM