0

我有一个 keyguard 应用程序小部件,我在其中启动了几个不同的 Intent。看来我可以启动 /system 应用程序(mms、设置等)。但不是 /data 应用程序(例如 chrome)

我定义了以下 PendingIntentTemplate :

Intent startApplicationIntent = new Intent();   
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, startApplicationIntent, 0);
mainLayout.setPendingIntentTemplate(R.id.stackview, pendingIntent);

在我的 RemoteViewsFactory 中,我有以下 FillInIntent:

Intent i = pm.getLaunchIntentForPackage(pkgName);
i.addCategory(Intent.CATEGORY_LAUNCHER);            
i.setAction(Intent.ACTION_MAIN);
stackviewRemoteView.setOnClickFillInIntent(R.id.stackview_image, i);

没有错误,意图只是解锁了键盘保护。它也绝对不是 null,因为 toString() 方法显示以下内容:

Intent { act=android.intent.action.MAIN cat=    
[android.intent.category.LAUNCHER] flg=0x10000000       
pkg=com.android.chrome    
cmp=com.android.chrome/com.google.android.apps.chrome.Main }

对于非系统应用程序,我需要做些什么特别的事情吗?我认为 getLaunchIntentForPackage 会为我提供启动应用程序所需的一切,就像从主屏幕选择它时启动应用程序一样。

4

1 回答 1

0

似乎我这样做的方式是做出一些假设。

PendingIntent.getActivity 调用 startActivity(),这需要指定 CATEGORY_DEFAULT。

以下代码可能“更正确”并且不太可能抛出 CATEGORY_DEFAULT 找不到的错误:

Intent i = new Intent();
i.setPackage(pkgName);
i.addCategory(Intent.CATEGORY_DEFAULT);
于 2013-04-01T04:55:02.370 回答