我正在尝试替换默认的 Android 电话应用程序。更具体地说,我想在每次执行呼叫操作时启动自定义电话呼叫屏幕。
我知道自 Android 的 API 24(版本 7.0 - Nougat)以来这是可能的,但我没有找到有关如何实现此目的的参考资料。只是要明确的是,我不想显示通话屏幕的覆盖布局。我想将我的通话应用程序设置为默认。
我在这里发现了短信应用程序的类似问题:Stackoverflow - 替换默认短信应用 https://stackoverflow.com/questions/30127564/android-default-making-default-sms-app。答案清楚地表明,您需要列出短信应用程序的所有组件,以便能够将其设置为 Android 设置中的默认应用程序。但我找不到任何有关电话组件的参考。
我怎样才能实现这个目标?
作为参考,这是我的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mynumbers">
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS"/>
<uses-permission android:name="android.permission.INTERNET" />
<application
android:label="">
<activity
android:name=".MainActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.DIAL" />
<action android:name="android.intent.action.CALL_BUTTON" />
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.LAUNCHER" />
<data android:scheme="tel"/>
</intent-filter>
</activity>
<activity
android:name=".NumberManagementActivity"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
<activity
android:name=".CallActivity"
android:parentActivityName=".MainDialerActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainDialerActivity" />
<intent-filter>
<action android:name="android.permission.CALL_PHONE" />
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</activity>
<activity
android:name=".MainDialerActivity"
android:parentActivityName=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<action android:name="android.intent.action.CALL_BUTTON"/>
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<action android:name="android.permission.CALL_PHONE"/>
<data android:scheme="tel"/>
</intent-filter>
</activity>
<receiver
android:name=".PhoneCallListener">
<intent-filter android:priority="1">
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
<!-- Incoming call activity -->
<activity
android:name=".IncomingCallActivity"
android:configChanges="orientation"
android:label="@string/title_activity_fullscreen"
android:theme="@style/IncomingCallTheme">
<intent-filter>
<action android:name="android.intent.action.ANSWER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".DefaultConfigurationActivity"
android:parentActivityName=".MainActivity">
</activity>
</application>
</manifest>
我查遍了google,终于找到了解决办法。现在我可以用我的自定义创建的应用程序替换默认的电话(呼叫)应用程序
如果您在清单文件中添加这些权限,您将能够将您的应用程序更改为默认呼叫应用程序 -> 电话菜单 -> 设置 -> 应用程序 -> 默认应用程序(右上角的菜单项) -> 默认呼叫应用程序,最后选择您的应用程序。
这是权限列表
<uses-permission
android:name="android.permission.CALL_PRIVILEGED"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission
android:name="android.permission.MODIFY_PHONE_STATE"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL" />
<uses-permission android:name="com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL" />
<uses-permission
android:name="android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<!-- allow broadcasting secret code intents that reboot the phone -->
<uses-permission
android:name="android.permission.REBOOT"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--
This tells the activity manager to not delay any of our activity
start requests, even if they happen immediately after the user
presses home.
-->
<uses-permission
android:name="android.permission.STOP_APP_SWITCHES"
tools:ignore="ProtectedPermissions" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)