Caused by: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.int

本文详细列举了Android系统中受保护的广播意图,这些广播通常只能由系统发送,第三方应用无法直接触发。文章通过源代码展示了如何判断一个广播是否受到保护,并解释了相关异常处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

crash information:
Caused by: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.HEADSET_PLUG from
    at android.os.Parcel.readException(Parcel.java:1465) 
    at android.os.Parcel.readException(Parcel.java:1419) 


ActivityManagerService.java:
               if (AppGlobals.getPackageManager().isProtectedBroadcast( //whether the protected broadcastion
                        intent.getAction())) {                          //判断是否是受保护的广播
                    String msg = "Permission Denial: not allowed to send broadcast "
                            + intent.getAction() + " from pid="
                            + callingPid + ", uid=" + callingUid;
                    Slog.w(TAG, msg);
                    throw new SecurityException(msg);
                } else if (AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(intent.getAction())) {
                     .....
                    }
                }

这是受保护的广播,只有系统才能发送。

This is protected intent that can only be sent by the system. 

frameworks/base/core/res/AndroidManifest.xml
    <!-- ================================================ -->
    <!-- Special broadcasts that only the system can send -->
    <!-- ================================================ -->
<protected-broadcast android:name="android.intent.action.HEADSET_PLUG" />

    <protected-broadcast android:name="android.intent.action.SCREEN_OFF" />
    <protected-broadcast android:name="android.intent.action.SCREEN_ON" />
    <protected-broadcast android:name="android.intent.action.USER_PRESENT" />
    <protected-broadcast android:name="android.intent.action.TIME_SET" />
    <protected-broadcast android:name="android.intent.action.TIME_TICK" />
    <protected-broadcast android:name="android.intent.action.TIMEZONE_CHANGED" />
    <protected-broadcast android:name="android.intent.action.DATE_CHANGED" />
    <protected-broadcast android:name="android.intent.action.BOOT_COMPLETED" />
    <protected-broadcast android:name="android.intent.action.PACKAGE_INSTALL" />
    <protected-broadcast android:name="android.intent.action.PACKAGE_ADDED" />
    <protected-broadcast android:name="android.intent.action.PACKAGE_REPLACED" />
    <protected-broadcast android:name="android.intent.action.MY_PACKAGE_REPLACED" />
    <protected-broadcast android:name="android.intent.action.PACKAGE_REMOVED" />
    <protected-broadcast android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
    <protected-broadcast android:name="android.intent.action.PACKAGE_CHANGED" />
    <protected-broadcast android:name="android.intent.action.PACKAGE_RESTARTED" />
    <protected-broadcast android:name="android.intent.action.PACKAGE_DATA_CLEARED" />
    <protected-broadcast android:name="android.intent.action.PACKAGE_FIRST_LAUNCH" />
    <protected-broadcast android:name="android.intent.action.PACKAGE_NEEDS_VERIFICATION" />
    <protected-broadcast android:name="android.intent.action.PACKAGE_VERIFIED" />
    <protected-broadcast android:name="android.intent.action.UID_REMOVED" />
    <protected-broadcast android:name="android.intent.action.QUERY_PACKAGE_RESTART" />
    <protected-broadcast android:name="android.intent.action.CONFIGURATION_CHANGED" />
    <protected-broadcast android:name="android.intent.action.LOCALE_CHANGED" />
    <protected-broadcast android:name="android.intent.action.BATTERY_CHANGED" />
    <protected-broadcast android:name="android.intent.action.BATTERY_LOW" />
    <protected-broadcast android:name="android.intent.action.BATTERY_OKAY" />
    <protected-broadcast android:name="android.intent.action.ACTION_POWER_CONNECTED" />
    <protected-broadcast android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
    <protected-broadcast android:name="android.intent.action.ACTION_SHUTDOWN" />
    <protected-broadcast android:name="android.intent.action.DEVICE_STORAGE_LOW" />
    <protected-broadcast android:name="android.intent.action.DEVICE_STORAGE_OK" />
    <protected-broadcast android:name="android.intent.action.DEVICE_STORAGE_FULL" />
    <protected-broadcast android:name="android.intent.action.DEVICE_STORAGE_NOT_FULL" />
    <protected-broadcast android:name="android.intent.action.NEW_OUTGOING_CALL" />
    <protected-broadcast android:name="android.intent.action.REBOOT" />
    <protected-broadcast android:name="android.intent.action.DOCK_EVENT" />
    <protected-broadcast android:name="android.intent.action.MASTER_CLEAR_NOTIFICATION" />
    <protected-broadcast android:name="android.intent.action.USER_ADDED" />
    <protected-broadcast android:name="android.intent.action.USER_REMOVED" />
    <protected-broadcast android:name="android.intent.action.USER_STARTING" />
    <protected-broadcast android:name="android.intent.action.USER_STARTED" />
    <protected-broadcast android:name="android.intent.action.USER_STOPPING" />
    <protected-broadcast android:name="android.intent.action.USER_STOPPED" />
    <protected-broadcast android:name="android.intent.action.USER_BACKGROUND" />
    <protected-broadcast android:name="android.intent.action.USER_FOREGROUND" />
    <protected-broadcast android:name="android.intent.action.USER_SWITCHED" />

    <protected-broadcast android:name="android.app.action.ENTER_CAR_MODE" />
    <protected-broadcast android:name="android.app.action.EXIT_CAR_MODE" />
    <protected-broadcast android:name="android.app.action.ENTER_DESK_MODE" />
    <protected-broadcast android:name="android.app.action.EXIT_DESK_MODE" />

    <protected-broadcast android:name="android.appwidget.action.APPWIDGET_UPDATE_OPTIONS" />
    <protected-broadcast android:name="android.appwidget.action.APPWIDGET_DELETED" />
    <protected-broadcast android:name="android.appwidget.action.APPWIDGET_DISABLED" />
    <protected-broadcast android:name="android.appwidget.action.APPWIDGET_ENABLED" />

    <protected-broadcast android:name="android.backup.intent.RUN" />
    <protected-broadcast android:name="android.backup.intent.CLEAR" />
    <protected-broadcast android:name="android.backup.intent.INIT" />

    <protected-broadcast android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
    <protected-broadcast android:name="android.bluetooth.adapter.action.SCAN_MODE_CHANGED" />
    <protected-broadcast android:name="android.bluetooth.adapter.action.DISCOVERY_STARTED" />
    <protected-broadcast android:name="android.bluetooth.adapter.action.DISCOVERY_FINISHED" />
    <protected-broadcast android:name="android.bluetooth.adapter.action.LOCAL_NAME_CHANGED" />
    <protected-broadcast android:name="android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED" />
    <protected-broadcast android:name="android.bluetooth.device.action.UUID" />
    <protected-broadcast android:name="android.bluetooth.device.action.ALIAS_CHANGED" />
    <protected-broadcast android:name="android.bluetooth.device.action.FOUND" />
    <protected-broadcast android:name="android.bluetooth.device.action.DISAPPEARED" />
    <protected-broadcast android:name="android.bluetooth.device.action.CLASS_CHANGED" />
    <protected-broadcast android:name="android.bluetooth.device.action.ACL_CONNECTED" />
    <protected-broadcast android:name="android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED" />
    <protected-broadcast android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
    <protected-broadcast android:name="android.bluetooth.device.action.NAME_CHANGED" />
    <protected-broadcast android:name="android.bluetooth.device.action.BOND_STATE_CHANGED" />
    <protected-broadcast android:name="android.bluetooth.device.action.NAME_FAILED" />
    <protected-broadcast android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
    <protected-broadcast android:name="android.bluetooth.device.action.PAIRING_CANCEL" />
    <protected-broadcast android:name="android.bluetooth.device.action.CONNECTION_ACCESS_REPLY" />
    <protected-broadcast android:name="android.bluetooth.device.action.CONNECTION_ACCESS_CANCEL" />
    <protected-broadcast android:name="android.bluetooth.device.action.CONNECTION_ACCESS_REQUEST" />
    <protected-broadcast android:name="android.bluetooth.devicepicker.action.LAUNCH" />
    <protected-broadcast android:name="android.bluetooth.devicepicker.action.DEVICE_SELECTED" />
    <protected-broadcast
        android:name="android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED" />
    <protected-broadcast
        android:name="android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED" />
    <protected-broadcast
        android:name="android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT" />
    <protected-broadcast
        android:name="android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED" />
    <protected-broadcast
        android:name="android.bluetooth.a2dp.profile.action.PLAYING_STATE_CHANGED" />
    <protected-broadcast
        android:name="android.bluetooth.input.profile.action.CONNECTION_STATE_CHANGED" />
    <protected-broadcast
        android:name="android.bluetooth.input.profile.action.PROTOCOL_MODE_CHANGED" />
    <protected-broadcast
        android:name="android.bluetooth.input.profile.action.VIRTUAL_UNPLUG_STATUS" />
    <protected-broadcast
        android:name="android.bluetooth.pan.profile.action.CONNECTION_STATE_CHANGED" />
    <protected-broadcast android:name="android.bluetooth.pbap.intent.action.PBAP_STATE_CHANGED" />
    <protected-broadcast android:name="android.btopp.intent.action.INCOMING_FILE_NOTIFICATION" />
    <protected-broadcast android:name="android.btopp.intent.action.BT_OPP_HANDOVER_STARTED" />
    <protected-broadcast android:name="android.btopp.intent.action.TRANSFER_COMPLETE" />
    <protected-broadcast android:name="android.btopp.intent.action.USER_CONFIRMATION_TIMEOUT" />
    <protected-broadcast android:name="android.btopp.intent.action.BT_OPP_TRANSFER_PROGRESS" />
    <protected-broadcast android:name="android.btopp.intent.action.LIST" />
    <protected-broadcast android:name="android.btopp.intent.action.OPEN_OUTBOUND" />
    <protected-broadcast android:name="android.btopp.intent.action.HIDE_COMPLETE" />
    <protected-broadcast android:name="android.btopp.intent.action.CONFIRM" />
    <protected-broadcast android:name="android.btopp.intent.action.HIDE" />
    <protected-broadcast android:name="android.btopp.intent.action.BT_OPP_TRANSFER_DONE" />
    <protected-broadcast android:name="android.btopp.intent.action.RETRY" />
    <protected-broadcast android:name="android.btopp.intent.action.OPEN" />
    <protected-broadcast android:name="android.btopp.intent.action.OPEN_INBOUND" />
    <protected-broadcast android:name="com.android.bluetooth.pbap.authchall" />
    <protected-broadcast android:name="com.android.bluetooth.pbap.userconfirmtimeout" />
    <protected-broadcast android:name="com.android.bluetooth.pbap.authresponse" />
    <protected-broadcast android:name="com.android.bluetooth.pbap.authcancelled" />

    <protected-broadcast android:name="android.hardware.display.action.WIFI_DISPLAY_STATUS_CHANGED" />

    <protected-broadcast android:name="android.hardware.usb.action.USB_STATE" />
    <protected-broadcast android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
    <protected-broadcast android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
    <protected-broadcast android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
    <protected-broadcast android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />

    <protected-broadcast android:name="android.intent.action.HEADSET_PLUG" />
    <protected-broadcast android:name="android.intent.action.ANALOG_AUDIO_DOCK_PLUG" />
    <protected-broadcast android:name="android.intent.action.DIGITAL_AUDIO_DOCK_PLUG" />
    <protected-broadcast android:name="android.intent.action.HDMI_AUDIO_PLUG" />
    <protected-broadcast android:name="android.intent.action.USB_AUDIO_ACCESSORY_PLUG" />
    <protected-broadcast android:name="android.intent.action.USB_AUDIO_DEVICE_PLUG" />

    <protected-broadcast android:name="android.media.AUDIO_BECOMING_NOISY" />
    <protected-broadcast android:name="android.media.RINGER_MODE_CHANGED" />
    <protected-broadcast android:name="android.media.VIBRATE_SETTING_CHANGED" />
    <protected-broadcast android:name="android.media.VOLUME_CHANGED_ACTION" />
    <protected-broadcast android:name="android.media.MASTER_VOLUME_CHANGED_ACTION" />
    <protected-broadcast android:name="android.media.MASTER_MUTE_CHANGED_ACTION" />
    <protected-broadcast android:name="android.media.SCO_AUDIO_STATE_CHANGED" />
    <protected-broadcast android:name="android.media.ACTION_SCO_AUDIO_STATE_UPDATED" />

    <protected-broadcast android:name="android.intent.action.MEDIA_REMOVED" />
    <protected-broadcast android:name="android.intent.action.MEDIA_UNMOUNTED" />
    <protected-broadcast android:name="android.intent.action.MEDIA_CHECKING" />
    <protected-broadcast android:name="android.intent.action.MEDIA_NOFS" />
    <protected-broadcast android:name="android.intent.action.MEDIA_MOUNTED" />
    <protected-broadcast android:name="android.intent.action.MEDIA_SHARED" />
    <protected-broadcast android:name="android.intent.action.MEDIA_UNSHARED" />
    <protected-broadcast android:name="android.intent.action.MEDIA_BAD_REMOVAL" />
    <protected-broadcast android:name="android.intent.action.MEDIA_UNMOUNTABLE" />
    <protected-broadcast android:name="android.intent.action.MEDIA_EJECT" />

    <protected-broadcast android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    <protected-broadcast android:name="android.net.conn.CONNECTIVITY_CHANGE_IMMEDIATE" />
    <protected-broadcast android:name="android.net.conn.DATA_ACTIVITY_CHANGE" />
    <protected-broadcast android:name="android.net.conn.BACKGROUND_DATA_SETTING_CHANGED" />
    <protected-broadcast android:name="android.net.conn.CAPTIVE_PORTAL_TEST_COMPLETED" />

    <protected-broadcast android:name="android.net.nsd.STATE_CHANGED" />

    <protected-broadcast android:name="android.nfc.action.LLCP_LINK_STATE_CHANGED" />
    <protected-broadcast android:name="com.android.nfc_extras.action.RF_FIELD_ON_DETECTED" />
    <protected-broadcast android:name="com.android.nfc_extras.action.RF_FIELD_OFF_DETECTED" />
    <protected-broadcast android:name="com.android.nfc_extras.action.AID_SELECTED" />

    <protected-broadcast android:name="android.nfc.action.TRANSACTION_DETECTED" />
    <protected-broadcast android:name="android.intent.action.CLEAR_DNS_CACHE" />
    <protected-broadcast android:name="android.intent.action.PROXY_CHANGE" />

    <protected-broadcast android:name="android.os.UpdateLock.UPDATE_LOCK_CHANGED" />

    <protected-broadcast android:name="android.intent.action.DREAMING_STARTED" />
    <protected-broadcast android:name="android.intent.action.DREAMING_STOPPED" />
    <protected-broadcast android:name="android.intent.action.ANY_DATA_STATE" />
    <protected-broadcast android:name="android.intent.action.DATA_CONNECTION_CONNECTED_TO_PROVISIONING_APN" />

    <protected-broadcast android:name="com.android.server.WifiManager.action.START_SCAN" />
    <protected-broadcast android:name="com.android.server.WifiManager.action.DELAYED_DRIVER_STOP" />
    <protected-broadcast android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    <protected-broadcast android:name="android.net.wifi.WIFI_AP_STATE_CHANGED" />
    <protected-broadcast android:name="android.net.wifi.WIFI_SCAN_AVAILABLE" />
    <protected-broadcast android:name="android.net.wifi.SCAN_RESULTS" />
    <protected-broadcast android:name="android.net.wifi.RSSI_CHANGED" />
    <protected-broadcast android:name="android.net.wifi.STATE_CHANGE" />
    <protected-broadcast android:name="android.net.wifi.LINK_CONFIGURATION_CHANGED" />
    <protected-broadcast android:name="android.net.wifi.CONFIGURED_NETWORKS_CHANGE" />
    <protected-broadcast android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
    <protected-broadcast android:name="android.net.wifi.supplicant.STATE_CHANGE" />
    <protected-broadcast android:name="android.net.wifi.p2p.STATE_CHANGED" />
    <protected-broadcast android:name="android.net.wifi.p2p.DISCOVERY_STATE_CHANGE" />
    <protected-broadcast android:name="android.net.wifi.p2p.THIS_DEVICE_CHANGED" />
    <protected-broadcast android:name="android.net.wifi.p2p.PEERS_CHANGED" />
    <protected-broadcast android:name="android.net.wifi.p2p.CONNECTION_STATE_CHANGE" />
    <protected-broadcast android:name="android.net.wifi.p2p.PERSISTENT_GROUPS_CHANGED" />
    <protected-broadcast android:name="android.net.conn.TETHER_STATE_CHANGED" />
    <protected-broadcast android:name="android.net.conn.INET_CONDITION_ACTION" />
    <protected-broadcast android:name="android.net.conn.NETWORK_CONDITIONS_MEASURED" />
    <protected-broadcast
            android:name="android.net.ConnectivityService.action.PKT_CNT_SAMPLE_INTERVAL_ELAPSED" />
    <protected-broadcast android:name="android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE" />
    <protected-broadcast android:name="android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE" />
    <protected-broadcast android:name="android.intent.action.AIRPLANE_MODE" />
    <protected-broadcast android:name="android.intent.action.ADVANCED_SETTINGS" />
    <protected-broadcast android:name="android.intent.action.BUGREPORT_FINISHED" />

    <protected-broadcast android:name="android.intent.action.ACTION_IDLE_MAINTENANCE_START" />
    <protected-broadcast android:name="android.intent.action.ACTION_IDLE_MAINTENANCE_END" />

    <protected-broadcast android:name="android.intent.action.HDMI_PLUGGED" />

    <protected-broadcast android:name="android.intent.action.PHONE_STATE" />

    <protected-broadcast android:name="android.location.GPS_ENABLED_CHANGE" />
    <protected-broadcast android:name="android.location.PROVIDERS_CHANGED" />
    <protected-broadcast android:name="android.location.MODE_CHANGED" />
    <protected-broadcast android:name="android.location.GPS_FIX_CHANGE" />
    <protected-broadcast android:name="android.net.proxy.PAC_REFRESH" />

    <protected-broadcast
        android:name="com.android.server.connectivityservice.CONNECTED_TO_PROVISIONING_NETWORK_ACTION" />
<think>嗯,用户遇到了一个JavaSecurityException,具体是“Binderinvocation toan incorrectinterface”。我需要先理解这个错误的原因。根据引用中的信息,这个错误通常发生在使用AIDL进行进程间通信(IPC)时,客户端和服务端的Binder接口不匹配。也就是说,客户端可能绑定到了错误的Service类,导致接口不一致。首先,我应该检查用户提到的代码部分,尤其是绑定Service的地方。用户提到他们有两个Services,可能在绑定的时候写错了类名,比如把AService.class写成了BService.class。这种情况下,Intent指向错误的Service,自然会导致接口不匹配,从而抛出这个异常。接下来,我需要考虑可能的解决方案。根据引用中的例子,解决方案包括检查绑定的Service类是否正确,确认AIDL接口是否一致,以及清理项目重新构建。这些都是常见的步骤,可以逐一排除问题。 另外,用户可能没有意识到AIDL文件修改后需要重新编译,或者在不同的模块中使用了不同版本的AIDL接口,这也会导致接口不匹配。因此,提醒用户检查这些方面也是必要的。还需要考虑是否有其他原因导致这个错误,比如权限问题或者Service声明的问题。但根据提供的引用,主要问题还是绑定错误或接口不一致。因此,重点应该放在检查绑定代码和AIDL文件的一致性上。最后,生成的相关问题应该覆盖常见的相关情况,比如其他Binder异常、AIDL调试方法、多Service绑定的注意事项以及如何检测接口匹配。这样用户可以有更全面的了解,预防类似问题再次发生。</think>### 原因分析 `java.lang.SecurityException: Binder invocation to an incorrect interface` 错误通常发生在 **Android跨进程通信(AIDL)** 中,原因包括: 1. **客户端与服务端AIDL接口定义不一致**,例如修改了AIDL文件但未同步到两端[^2]。 2. **绑定服务时指定了错误的Service类**,例如将`Intent`指向`AService.class`却误写为`BService.class`[^2]。 3. **跨模块调用时未对齐AIDL接口版本**,例如不同模块使用不同包名的相同接口文件。 ### 解决方案 #### 1. 检查Service绑定代码 确认客户端绑定服务时使用的`Intent`指向正确的Service类: ```java // 错误示例:将AService误写为BService // Intent intent = new Intent(this, BService.class); // 正确写法 Intent intent = new Intent(this, AService.class); bindService(intent, mConnection, Context.BIND_AUTO_CREATE); ``` #### 2. 验证AIDL接口一致性 - 确保客户端和服务端的AIDL文件 **包名、方法签名、参数顺序** 完全一致。 - 若修改了AIDL文件,需 **清理项目并重新编译**(Build > Clean Project)。 #### 3. 检查多模块场景 若客户端和服务端位于不同模块(如`app`模块和`library`模块),需确保: - AIDL文件路径和包名相同(例如均位于`com.example.aidl`包下)。 - 接口定义中避免使用模块特有的数据类型(如未实现`Parcelable`的自定义类)。 #### 4. 使用Logcat定位问题 在绑定服务时添加日志,确认实际绑定的Service名称: ```java Log.d("BinderDebug", "Binding to service: " + intent.getComponent().getClassName()); ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值