默认电话应用程序意图操作拨号未打开活动

时间:2020-01-02 16:48:10

标签: java android android-dialer

我正在为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设置,以便用户将其打开。

在My 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中,它从未被调用过。为什么没有 打开拨号程序活动?我要谢谢你。

0 个答案:

没有答案