我正在为 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");
}
}
InCallServiceImplementation
当用户从调用按钮启动 android.intent.action.CALL 时,我被调用- 但是当用户在公司提供的电话应用程序中触摸最近通话中的电话号码时,我认为这是一个
android.intent.action.DIAL
并且它应该打开我的 DialerActivity,但它既不会发生在模拟器上,也不会发生在真实设备上。
供您参考,您可以看到我
getSchemeSpecificPart
在我的 DialerActivity onCreate 中打印,它永远不会被调用。为什么它没有打开拨号器活动?我要提前感谢你。