首页 > 解决方案 > 默认电话应用程序意图操作拨号未打开活动

问题描述

我正在为 android开发一个默认的电话应用程序,例如:

在清单和请求的运行时中也列出了权限:

<uses-permission android:name="android.permission.CALL_PHONE" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 
<uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

在请求这些权限之前,我首先请求通过ACTION_CHANGE_DEFAULT_DIALER意图授予它作为默认值,然后是权限,然后是 ACTION_MANAGE_OVERLAY_PERMISSION 设置,以便用户将其打开。

在我的 manifest.xml 中,我声明了服务InCallService实现:

<service
        android:name=".InCallServiceImplementation"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.BIND_INCALL_SERVICE">
        <meta-data
            android:name="android.telecom.IN_CALL_SERVICE_UI"
            android:value="true" />
        <meta-data
            android:name="android.telecom.IN_CALL_SERVICE_RINGING"
            android:value="true" />

        <intent-filter>
            <action android:name="android.telecom.InCallService" />
        </intent-filter>
    </service>

当用户启动时打开我的应用程序拨号盘的活动android.intent.action.DIAL

<activity
        android:name=".DialerActivity"
        android:label="@string/title_activity_dialer"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>

            <!-- Handle links from other applications -->
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.DIAL" />
            <action android:name="android.intent.action.CALL" />

            <!-- Populate the system chooser -->
            <category android:name="android.intent.category.DEFAULT" />

            <!-- Handle links in browsers -->
            <category android:name="android.intent.category.BROWSABLE" />

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

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

和我的 DialerActivity.java :

@Override
protected void onCreate(Bundle savedInstanceState)
{
     if (getIntent() != null && getIntent().getData() != null)
    {
        Log.d("MainActivity URI :", getIntent().getData().getSchemeSpecificPart());
    }
    else
    {
        Log.d("MainActivity URI :", "NULL INTENT FOUND");
    }
}
  1. InCallServiceImplementation当用户从调用按钮启动 android.intent.action.CALL 时,我被调用
  2. 但是当用户在公司提供的电话应用程序中触摸最近通话中的电话号码时,我认为这是一个android.intent.action.DIAL并且它应该打开我的 DialerActivity,但它既不会发生在模拟器上,也不会发生在真实设备上。

供您参考,您可以看到我getSchemeSpecificPart 在我的 DialerActivity onCreate 中打印,它永远不会被调用。为什么它没有打开拨号器活动?我要提前感谢你。

标签: javaandroidandroid-dialer

解决方案


推荐阅读