如果我的应用程序是默认应用程序,如何启动下一个匹配活动

时间:2011-09-29 11:54:00

标签: android android-activity android-intent

我有一个活动,可以作为各种意图的钩子。具体来说,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)。这是否意味着如果存在默认操作,那么从意图解析中忽略其他所有内容?

1 个答案:

答案 0 :(得分:0)

目前(在Android 2.3上)似乎没有其他方式转发意图而不是手动执行。此外,要发送CALL_PRIVILEGED意图,应用必须具有只有系统应用的特殊权限。 (否则应用程序将收到不允许的例外情况。)

总而言之,必须将意图转换为我的应用程序可以发送的其他意图,并通过从PackageManager.queryIntentActivities() API检索适用活动列表来手动启动下一个活动。