对于我的生活,我一直在与这种隐含的意图作斗争超过2天。我试图隐式使用startActivity(intent)启动一个Activity,但我一直得到“找不到处理意图的活动”,我已经按照android开发者网站上的说明如何创建和处理隐式意图并搜索了网页包括stackoverflow上的很多帖子,但问题仍然存在。现在是一些代码的时间:
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());
}
<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>
我可能做错了什么?我使用广播意图取得了巨大的成功,但在这种情况下我不想使用广播/接收器。
答案 0 :(得分:0)
所以我终于明白了。
恰好,当在intent上设置数据(URI,通过setData或使用接受URI的构造函数)时,系统会确定intent所需的相应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()来指定与intent关联的数据类型(MIME)。
所以基本上,在初始化我的意图时,我没有设置MIME类型(我需要自设置数据(URI))。 intent-filter无法与隐式intent相匹配,因为数据类型测试失败。
我的工作,我通过putExtra方法传递我的URI,让数据未设置。
我还从android清单中删除了意图过滤器中对数据标记的引用。
<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>