未找到 Activity 来处理 Intent(API 级别 19)
No Activity found to handle Intent (API Level 19)
在我的一生中,我已经与这种隐含的意图作斗争超过 2 天了。我正在尝试使用 startActivity(intent) 隐式启动 Activity,但我一直收到 "No activity found to handle intent",我已按照 android 开发人员网站上的说明进行操作创建和处理隐式意图并搜索了网络,包括很多关于 Whosebug 的帖子,但问题仍然存在。现在是时候写一些代码了:
组件 A - 触发隐式意图
Intent intent = new Intent();
//intent.setFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES);
intent.setAction(AppConstants.ACTION_VIEW_OUTLET);
//intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.withAppendedPath(OutletsContentProvider.CONTENT_URI,String.valueOf(outletID)));
intent.addCategory(Intent.CATEGORY_DEFAULT);
PackageManager pm = getPackageManager();
ComponentName cn = intent.resolveActivity(pm);
if(cn != null){
startActivity(intent);
Log.i(TAG, "Intent sent with action :" + intent.getAction());
Log.i(TAG, "Intent sent with data :" + intent.getDataString());
}
Android 清单(在与组件 A 相同的应用程序中)
<activity
android:name=".OutletDetailsActivity"
android:label="@string/title_activity_outlet_details">
<intent-filter>
<data android:scheme="content" />
<action android:name="com.synkron.pushforshawarma.ACTION_VIEW_OUTLET" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
我做错了什么?我使用广播意图取得了巨大的成功,但在这种情况下我不想使用 broadcast/receiver。
所以我终于想通了。
碰巧的是,当数据(URI,通过 setData 或通过使用接受 URI 的构造函数)设置在意图上时,系统会确定意图所需的适当 MIME 类型。
Intent intent = new Intent(AppConstants.ACTION_VIEW_OUTLET);
intent.putExtra("OUTLET_ID",
Uri.withAppendedPath(OutletsContentProvider.CONTENT_URI, String.valueOf(outletID)));
intent.addCategory(Intent.CATEGORY_DEFAULT);
当未设置或指定 URI 或数据时,需要使用 settype() 来指定与意图关联的数据类型 (MIME)。
所以基本上,我在初始化意图时没有设置 MIME 类型(我需要设置数据 (URI),因为我设置了数据 (URI))。由于数据类型测试失败,意图过滤器无法匹配隐式意图。
我的变通方法是通过 putExtra 方法传递我的 URI,但未设置数据。
我还从 android 清单中删除了对 intent 过滤器中数据标记的引用。
<activity
android:name=".OutletDetailsActivity"
android:label="@string/title_activity_outlet_details">
<intent-filter>
<action android:name="com.synkron.pushforshawarma.ACTION_VIEW_OUTLET" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
在我的一生中,我已经与这种隐含的意图作斗争超过 2 天了。我正在尝试使用 startActivity(intent) 隐式启动 Activity,但我一直收到 "No activity found to handle intent",我已按照 android 开发人员网站上的说明进行操作创建和处理隐式意图并搜索了网络,包括很多关于 Whosebug 的帖子,但问题仍然存在。现在是时候写一些代码了:
组件 A - 触发隐式意图
Intent intent = new Intent();
//intent.setFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES);
intent.setAction(AppConstants.ACTION_VIEW_OUTLET);
//intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.withAppendedPath(OutletsContentProvider.CONTENT_URI,String.valueOf(outletID)));
intent.addCategory(Intent.CATEGORY_DEFAULT);
PackageManager pm = getPackageManager();
ComponentName cn = intent.resolveActivity(pm);
if(cn != null){
startActivity(intent);
Log.i(TAG, "Intent sent with action :" + intent.getAction());
Log.i(TAG, "Intent sent with data :" + intent.getDataString());
}
Android 清单(在与组件 A 相同的应用程序中)
<activity
android:name=".OutletDetailsActivity"
android:label="@string/title_activity_outlet_details">
<intent-filter>
<data android:scheme="content" />
<action android:name="com.synkron.pushforshawarma.ACTION_VIEW_OUTLET" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
我做错了什么?我使用广播意图取得了巨大的成功,但在这种情况下我不想使用 broadcast/receiver。
所以我终于想通了。
碰巧的是,当数据(URI,通过 setData 或通过使用接受 URI 的构造函数)设置在意图上时,系统会确定意图所需的适当 MIME 类型。
Intent intent = new Intent(AppConstants.ACTION_VIEW_OUTLET);
intent.putExtra("OUTLET_ID",
Uri.withAppendedPath(OutletsContentProvider.CONTENT_URI, String.valueOf(outletID)));
intent.addCategory(Intent.CATEGORY_DEFAULT);
当未设置或指定 URI 或数据时,需要使用 settype() 来指定与意图关联的数据类型 (MIME)。
所以基本上,我在初始化意图时没有设置 MIME 类型(我需要设置数据 (URI),因为我设置了数据 (URI))。由于数据类型测试失败,意图过滤器无法匹配隐式意图。
我的变通方法是通过 putExtra 方法传递我的 URI,但未设置数据。
我还从 android 清单中删除了对 intent 过滤器中数据标记的引用。
<activity
android:name=".OutletDetailsActivity"
android:label="@string/title_activity_outlet_details">
<intent-filter>
<action android:name="com.synkron.pushforshawarma.ACTION_VIEW_OUTLET" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>