android - 如果我的应用程序是默认应用程序,我该如何开始下一个匹配 Activity

标签 android android-activity android-intent

我有一个 Activity 可以作为各种 Intent 的 Hook 。具体来说,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>

我要求用户将我的应用设置为这些 Intent 的默认操作,这样他们就不必每次都选择它。这也是一个要求。

问题是在某些情况下我希望我的 Activity 透明地工作并将 Intent 传递给拨号程序或其他应用程序。这应该可以由用户选择。我通过在代码的某些位置对我的 Activity 使用 getPackageManager().setComponentEnabledSetting(myCompName, isEnabled, PackageManager.DONT_KILL_APP) 实现了这一点。

有没有更优雅的方法来做到这一点?我尝试了 startNextMatchingActivity(getIntent()) 但它没有启动任何东西(返回 false)。这是否意味着如果存在默认操作,则 Intent 解析将忽略其他所有内容?

最佳答案

目前(在 Android 2.3 上)除了手动转发 Intent 之外似乎没有其他方法。此外,要发送 CALL_PRIVILEGED Intent ,应用必须具有只有系统应用才有的特殊权限。 (否则应用将收到不允许的异常。)

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

关于android - 如果我的应用程序是默认应用程序,我该如何开始下一个匹配 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7596929/

相关文章:

java - Android - 使用 RxAndroid 进行 Robolectric 测试?

android - Activity 与 fragment

java - 一次 Activity 中我可以托管多少个 fragment ?

android - 使用 AlarmManager 取消特定的 PendingIntents

android - 在没有完成()的情况下重新加载 Android 中的 Activity

android - 在android中以编程方式发送短信

android - 错误 android.support.v4.app.Fragment$InstantiationException : Unable to instantiate fragment com. google.android.gms.maps.MapFragment

android - viewpager 页面中 mapview 的手势问题

安卓 Lollipop & appcompat v7

java - Android-将网页内容获取到字符串中