我有一个活动,可以作为各种意图的钩子。具体来说,VOICE_COMMAND和CALL_PRIVILEGED。 (这是使用这些的必要条件。)
<activity android:name=".MyActivity"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.VOICE_COMMAND" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
</activity>
我要求用户将我的应用程序设置为这些意图的默认操作,这样他们就不必每次都选择它。这也是一项要求。
问题在于,在某些情况下,我希望我的活动透明地工作,并将意图传递给拨号器或其他应用程序。这应该由用户选择。我通过在代码的某些位置对我的活动使用getPackageManager().setComponentEnabledSetting(myCompName, isEnabled, PackageManager.DONT_KILL_APP)
来实现此目的。
有更优雅的方法吗?我试过startNextMatchingActivity(getIntent())
但是没有启动任何东西(返回false)。这是否意味着如果存在默认操作,那么从意图解析中忽略其他所有内容?
答案 0 :(得分:0)
目前(在Android 2.3上)似乎没有其他方式转发意图而不是手动执行。此外,要发送CALL_PRIVILEGED意图,应用必须具有只有系统应用的特殊权限。 (否则应用程序将收到不允许的例外情况。)
总而言之,必须将意图转换为我的应用程序可以发送的其他意图,并通过从PackageManager.queryIntentActivities() API检索适用活动列表来手动启动下一个活动。