在意图 'click on phone number' 之后打开 activity

Open activity after intent 'click on phone number'

我在这个问题上找到了几个答案,但它对我不起作用。如果您在电子邮件或网站上单击 phone 号码,默认的拨号器弹出窗口会显示 select dialer/skype 等

我正在尝试让我的应用进入该列表 - 所以我不想处理实际的呼叫,但打开 activity 并显示用户点击的号码。

我试过这个:

<receiver android:name=".MyOutgoingCallHandler">
            <intent-filter>
                 <action android:name="android.intent.action.ACTION_DIAL" />
                 <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

但它没有显示在列表中。我应该过滤什么意图?

官方Android Developers blog已经介绍了这个过程。你可以在那里阅读所有相关内容。

您的 intent 过滤器看起来具有正确的操作,因此可能是您没有请求正确的 Android 权限。

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

以下是 Android 开发者博客建议您声明广播接收器的方式。

<manifest>
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />  
    <application>
        ...
        <receiver android:name=MyOutgoingCallHandler">
            <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>
        ...
    </application>
</manifest>

如果您想将 Activity 添加到 Activity 列表中,尽可能向用户显示 phone 拨号器,您需要有一个 Activity<activity> 定义必须在清单中包含此 intent-filter>

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.DIAL" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

您得到的是一个 BroadcastReceiver,它将接收去电 Intent。那是不一样的东西。