我患有意图解析机制。
我有内容提供商:
<provider
android:authorities="com.company.app"
android:name=".content.MyProvider"
android:exported="false" />
我有一个活动:
<activity
android:name=".activity.DetailedFlowActivity"
android:parentActivityName=".activity.LauncherActivity">
<intent-filter>
<action android:name="com.company.app.EDIT_CATEGORY" />
<action android:name="com.company.app.ANOTHER_EDIT_ACTION" />
<data
android:scheme="content"
android:host="com.company.app"
/>
</intent-filter>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".activity.LauncherActivity" />
</activity>
提供程序有两个特定路径(即SQLite数据库中的两个表),Activity
本身知道如何查询这两个路径。所以我只使用权限和方案声明<data>
,假设这足以解决意图。
问题是:每当我这样做时:
Intent intent = new Intent(DetailedFlowActivity.ACTION_EDIT_CATEGORY);
intent.setData(
Uri.withAppendedPath(CategoryItemContract.CONTENT_URI,
String.valueOf(categoryId)));
startActivity(intent);
我希望Intent能够解析为DetailedFlowActivity
,但它没有告诉我没有找到合适的Activity
来处理这样的意图:where action = com.company.app.EDIT_CATEGORY和data =内容://com.company.app/categories/123
我当然可以转向使用显式意图,因为这些内容发生在我的应用程序中,但我宁愿用漂亮的RESTful方法来实现:)
帮助表示赞赏。
答案 0 :(得分:1)
好的,现在我明白了。 Luksprog的评论迫使我再次阅读Intent resolution documentation,并对URI数据匹配部分给予更多关注。
首先,指定CATEGORY_DEFAULT,因为意图是隐式的。这是必要的,我错过了这件事。
第二,虽然它说:
包含URI但没有MIME类型的intent(既不显式也不显式) 只有在URI匹配时才传递测试 filter的URI格式和过滤器同样没有指定MIME 型
我发现,如果我的ContentProvider
需要指定MIME类型进行intent-filter。并通过操作将我的intent-filter拆分为两个过滤器:
<intent-filter>
<action android:name="com.company.app.EDIT_CATEGORY" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:scheme="content"
android:host="com.trustydroid.xpense"
android:mimeType="vnd.android.cursor.item/vdn.categories"
/>
</intent-filter>
..和其他人一样。
希望这有帮助。