我正在为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");
}
}
InCallServiceImplementation
在用户从调用按钮启动android.intent.action.CALL时被调用android.intent.action.DIAL
,它应该打开我的DialerActivity,但无论是在模拟器上还是在真实设备上都不会发生。 供您参考,您可以看到我正在打印
getSchemeSpecificPart
在我的DialerActivity onCreate中,它从未被调用过。为什么没有 打开拨号程序活动?我要谢谢你。