You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓开发:手机重启后无法捕获来电广播该如何解决

调整方案

核心原因

安卓系统重启后,未获取自启动权限、未注册开机广播监听、未动态申请电话相关危险权限的应用,无法被系统唤醒接收来电状态广播。

具体修改步骤

1. 新增必要权限声明

在AndroidManifest.xml的根节点下添加权限配置:

<!-- 监听开机完成广播的必要权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!-- 捕获来电状态的必要危险权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />

2. 修改广播接收器配置

给现有来电接收器添加开机广播的监听action,保证重启后系统能唤醒你的应用组件:

<receiver 
   android:name="InterceptCall"
   android:exported="true"
   android:enabled="true">
  <intent-filter android:priority="999">
      <action android:name="android.intent.action.PHONE_STATE"/>
      <!-- 新增开机完成相关监听动作 -->
      <action android:name="android.intent.action.BOOT_COMPLETED" />
      <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
  </intent-filter>
</receiver>

3. 新增动态权限申请逻辑

电话相关权限属于安卓6.0以上要求的危险权限,仅静态声明无效,必须在应用首次启动时主动向用户申请授权:

// 在主Activity的onCreate方法中添加如下代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    String[] needPermissions = {
        Manifest.permission.READ_PHONE_STATE,
        Manifest.permission.READ_CALL_LOG,
        Manifest.permission.RECEIVE_BOOT_COMPLETED
    };
    for (String perm : needPermissions) {
        if (checkSelfPermission(perm) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(needPermissions, 1001);
            break;
        }
    }
}

额外适配注意事项

  • 小米、华为、vivo、OPPO等国产定制ROM,默认禁止第三方应用自启动,需要引导用户手动在系统设置中开启应用的「自启动权限」「后台活动权限」,否则重启后应用无法被唤醒接收广播。
  • 不要将应用安装到SD卡,安装在机身存储才能正常接收开机完成广播。
  • 不要让应用被系统或安全软件强制停止,强制停止后的应用无法接收任何广播,直到用户手动打开应用一次。

内容的提问来源于stack exchange,提问作者Murat Aktay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:06:05