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