为什么这段代码不会导致我的应用程序处理调用?

时间:2013-08-27 12:41:33

标签: android android-intent phone-call

我正在尝试在我的应用中处理来电。我希望它能够在拨打电话(而非拨号)时启动活动。然而,当我按下“人物”活动中的“呼叫”或电话号码按钮时,我的应用程序永远不会被建议,即使我清除所有类似应用程序的默认设置或取消它们。 代码:

<!-- ... -->

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

<!-- ... -->

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.contact.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.CALL" />
            <action android:name="android.intent.action.CALL_BUTTON" />
            <action android:name="android.intent.action.CALL_PRIVILEGED" />
            <action android:name="android.intent.action.DIAL" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.DIAL" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data android:scheme="tel" />
        </intent-filter>
    </activity>
</application>

<!-- ... -->

我想我想抓住与呼叫或至少拨打相关的所有可能的意图? 那有什么不对?

更新:录制手机(例如在电子邮件应用中)可以使用,但我仍然无法处理来自“人物”的电话。

2 个答案:

答案 0 :(得分:0)

你试过吗?

<activity
    android:name="com.test.Call"
    android:label="@string/makeCall" >
    <intent-filter>
        <action android:name="android.intent.action.CALL" />
        <category android:name="android.intent.category.DEFAULT" />
        <action android:name="android.intent.action.CALL_PRIVILEGED" />
        <data android:scheme="tel" />
    </intent-filter>
</activity>

答案 1 :(得分:0)

它总是取决于调用应用程序正在执行哪个Intent。例如,当用户点击SMS应用程序中的电话号码时,我想执行我的Intent。看看LogCat显示SMS应用程序执行以下意图:

  

11-24 13:16:57.453:I / ActivityManager(390):START u0 {act = android.intent.action.VIEW dat = tel:xxxxxxxxxxxxx cmp = android / com.android.internal.app.ResolverActivity(来自pid 2493

的额外内容}

因此,通过添加以下intent过滤器,它适用于我的SMS应用程序:

        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.VIEW"/>
            <data android:scheme="tel" />
        </intent-filter>

我的建议是简单地使用LogCat来找出“人物”活动所期望的意图。