【发布时间】:2015-12-13 23:11:58
【问题描述】:
我正在尝试为我的应用程序创建一个自定义意图,以便我可以通过搜索支持我的方案的已安装包并将它们本质上用作插件来扩展它。我的清单中有以下内容
<activity android:name=".myMagicActivity">
<intent-filter>
<action android:name="com.mydomain.action.MYMAGICTHING"/>
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="mymagicthing" android:host="mydomain.com"/>
</intent-filter>
</activity>
我的测试应用程序运行良好,我可以启动意图,按预期查看数据。但是,如果我首先尝试测试意图的存在,它将失败。 总是。
我正在使用以下代码进行检查
public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION);
List<ResolveInfo> list =
packageManager.queryIntentActivities(intent,0);
return list.size() > 0;
}
这是来自Android developers blog的结果如下:
02-28 21:56:54.186: V/IntentResolver(150): Resolving type null scheme null of intent Intent { act=com.mydomain.action.MYMAGICTHING flg=0x8 }
02-28 21:56:54.186: V/IntentResolver(150): Action list: null
02-28 21:56:54.186: D/INTENT(17088): Intent MISSING
02-28 21:56:54.186: V/IntentResolver(150): Final result list:
如果我从清单中删除数据元素,则意图的检测工作完美,但显然没有数据传递给意图,因为它实际上并没有开始。
02-28 22:11:14.886: V/IntentResolver(150): Resolving type null scheme null of intent Intent { act=com.mydomain.action.MYMAGICTHING flg=0x8 }
02-28 22:11:14.886: V/IntentResolver(150): Action list: [ActivityIntentInfo{415df398 com.mydomain.myMagicActivity}]
02-28 22:11:14.886: V/IntentResolver(150): Matching against filter ActivityIntentInfo{415df398 com.mydomain.myMagicActivity}
02-28 22:11:14.886: V/IntentResolver(150): Filter matched! match=0x108000
02-28 22:11:14.886: V/IntentResolver(150): Final result list:
02-28 22:11:14.886: D/INTENT(17088): found intent
有什么想法吗?
【问题讨论】:
-
在使用
in queryIntentActivities之前,您是否尝试将数据设置为意图intent.setData(Uri.parse("mymagicthing://mydomain.com"));?
标签: android android-intent filter