简体   繁体   中英

SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BATTERY_CHANGED

I am trying to develop a widget which showing Battery Temperature. when i am registering a broadcast Receiver with android.intent.action.BATTERY_CHANGED

it shows some error like this.

java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BATTERY_CHANGED from pid=-1, uid=10058

As far as i know there is no need of permission for broadcast . If it is in the case of an activity. it is working properly.

    Intent intent = new Intent();
    intent.setAction("android.intent.action.BATTERY");
    return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

As far as i know there is no need of permission for broadcast

Yes, there is. You are sending the broadcast. And, quoting the documentation for ACTION_BATTERY_CHANGED :

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

You are not the system; you cannot send this broadcast.

I have no idea why you are creating a PendingIntent that is trying to send this broadcast, but you will need to do something else instead. If your objective is to trigger your BroadcastReceiver from a tap on your app widget, where that receiver also happens to listen to ACTION_BATTERY_CHANGED , then just use an explicit Intent identifying the receiver when creating your PendingIntent :

PendingIntent.getBroadcast(context, 0, new Intent(this, YourReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM