我正在寻找一种方法,将默认的拨号应用程序替换为我的自定义拨号应用程序,但我不知道如何实现。
这是我的要求:
- 创建自定义拨号UI
- 每当按下硬件上的通话按钮或Android上的通话按钮时,都会调用我的应用程序
- 该应用程序还可以从联系人屏幕中调用
我正在寻找一种方法,将默认的拨号应用程序替换为我的自定义拨号应用程序,但我不知道如何实现。
这是我的要求:
创建一个简单的Android应用程序(我们的拨号器)。 要实际呼叫某人,您只需要该方法:
private void performDial(String numberString) {
if (!numberString.equals("")) {
Uri number = Uri.parse("tel:" + numberString);
Intent dial = new Intent(Intent.ACTION_CALL, number);
startActivity(dial);
}
}
在AndroidManifest中授予您的应用程序调用权限
<uses-permission android:name="android.permission.CALL_PHONE" />
在 AndroidManifest 中设置意图,告诉你的手机在需要拨号器时使用你的应用程序
当有人点击拨打按钮时:
<intent-filter>
<action android:name="android.intent.action.CALL_BUTTON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
当某人触发一个URI时: <intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tel" />
</intent-filter>
这对我有用:
<activity
android:name=".activities.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- open activity when establishing a call -->
<intent-filter>
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
</activity>
这是第三方应用正确扩展InCallService的方法,该应用将在用户接受启动提示后替换系统默认的拨号器和InCallScreen。
他还提供了一个使用Kotlin编写的可工作示例应用程序(加分项)。
请在那里点赞他的答案,我不应得他的功劳。
注意:仅适用于API 23+,并且可能需要API 26中的额外权限。