Tam*_*ári 7 android android-intent android-package-managers
getPackageManager().getLaunchIntentForPackage("com.example.app")我想自己创建启动意图,而不是常规方式。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setPackage("com.example.app");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
如果 Activitycom.example.app已安装、启用且具有正确的清单,为什么 Android 找不到 Activity ?(它与getLaunchIntentForPackage.完美配合。)
据我所知,您正在尝试启动具有已知包名称 ( com.example.app) 的已知应用程序的启动器活动。我假设您有有关该应用程序的信息。因此,您可以通过明确的意图来启动它,如下所示:
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example.app", "com.example.app.MainActivity"));
if(intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
编辑:对两个意图对象进行分析(intent1==您自己的意图VS intent2==创建的意图getLaunchIntentForPackage()),区别在于
意图1:
{ act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] pkg=com.example.app }
意图2:
{ act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.example.app cmp=com.example.app/.MainActivity }
我必须相信,您为创建自己的意图对象所做的工作不足以使明确的意图发挥作用。您必须向 Android 提供有关您意图的更多信息,例如具体的组件名称(如我上面的回答所示)。
小智 1
“要接收隐式意图,您必须在意图过滤器中包含 CATEGORY_DEFAULT 类别。” - 你的接收应用程序有这个吗?
例子:
<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
摘自:https: //developer.android.com/guide/components/intents-filters#Receiving
您还可以检查以确保有一个活动可以接收您的广播:
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafe = activities.size() > 0;
Run Code Online (Sandbox Code Playgroud)
摘自:https: //developer.android.com/training/basics/intents/sending#java
| 归档时间: |
|
| 查看次数: |
5054 次 |
| 最近记录: |