android 静态注册 android.intent.action.BATTERY_CHANGED 不成功

发现在 android 当中 ,  代码动态注册的时候,可以收到 android.intent.action.BATTERY_CHANGED这个广播。

但是在 AndroidManifest.xml里面 静态注册 ,设置过滤器 为 android.intent.action.BATTERY_CHANGED 就不能成功, 刚开始以为代码不对,

后头才发现 是 android的原因。

 

后头自己 想了一个思路 就是,接收其他广播,然后接到广播,就开始在代码里面注册 我需要的广播,从而实现 我的功能。

网上有实现的代码 我就直接拷贝过来了,他是通过服务来实现的,原理基本差不多。

BroadcastReceiver类:

public class BatteryReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();

        if(null == bundle)
            return;

        boolean isPresent = intent.getBooleanExtra("present", false);
        String technology = intent.getStringExtra("technology");
        int plugged = intent.getIntExtra("plugged", -1);
        int scale = intent.getIntExtra("scale", -1);
        int health = intent.getIntExtra("health", 0);
        int status = intent.getIntExtra("status", 0);
        int rawlevel = intent.getIntExtra("level", -1);
        int level = 0;

        Log.d("Debug","Battery Receiver OnReceive");

        if(isPresent) {
            if (rawlevel >= 0 && scale > 0) {
                level = (rawlevel * 100) / scale;

                Log.d("Debug","BatterReceiver: " + level);

                Toast.makeText(context,"Battery Receiver: " + level + "\t" + status + "Raw: " + rawlevel,Toast.LENGTH_LONG).show();

                if(level <60) {
                    /*
                     * Only invoke the service when level below threshold
                     */
                    Intent i = new Intent(context, BatteryService.class);
                    i.putExtra("level", level);
                    context.startService(i);
                }
            }
        }
    }
}

 

然后我用一个 service来在Oncreate()中注册,然后在onstart()中 控制事件。

public class BatteryService extends Service {
    /*
     * First Call to onStart we don‘t want to do anything
     */
    boolean avoidFirst = false;
    private BroadcastReceiver receiver;

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        receiver = new BatteryReceiver();
        registerReceiver(receiver, filter);
    }

    @Override
    public void onStart(Intent intent, int startId) {
        Log.d("Debug","Battery Service On Start");
        int level = intent.getIntExtra("level", -1);

        if(avoidFirst) {
            if(level != -1) {
                Log.d("Debug","Battery Alert Notifying..... " + level);
                SMSManager.sendSMS(BatteryService.this, "<number redacted>", "Battery Level Aleart: " + level);
                stopSelf();
            }
        } else {
            avoidFirst = true;
        }
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        PreferenceUtil.updatePreference(BatteryService.this, "battery_monitor_on", false);
        unregisterReceiver(receiver);
    }
}

android 静态注册 android.intent.action.BATTERY_CHANGED 不成功,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。