我希望在电池电量充足时播放声音作为通知。
在我的接收器课程中,我为" power connected"并且"电源断开"他们工作正常!
但是我的接收器没有识别出ACTION_BATTERY_CHANGED。我经常搜索,我发现我必须以编程方式注册它。
问题是我需要在没有任何活动的情况下注册它。因为我想通知" Battery_Fully_charged"即使我的程序没有运行。
如何在我的接收器中注册这样的东西(" MyReceiver.class")?
这是我找到的示例代码,它可以工作。但我想在没有活动的情况下这样做。
public class Main extends Activity {
private TextView batteryTxt;
private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context ctxt, Intent intent) {
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
batteryTxt.setText(String.valueOf(level) + "%");
}
};
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.main);
batteryTxt = (TextView) this.findViewById(R.id.batteryTxt);
this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
}
编辑: Service和Broadcase Receiver有什么区别?我尝试了服务,但仍然没有得到任何结果
答案 0 :(得分:0)
您无法通过清单中声明的组件接收此内容,只能通过
Context.registerReceiver()
明确注册它。 [...]
这意味着:
1)只有BroadcastReceiver
才能收到这些意图。
2)只有动态注册的接收者才能接收这些意图。
您已经了解如何在活动中查看服务:
public class MyService extends Service {
private final IntentFilter batteryIntentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
private final BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context ctxt, Intent intent) {
// React.
}
};
public void onCreate() {
super.onCreate();
registerReceiver(batteryReceiver, batteryIntentFilter);
}
public void onDestroy() {
unregisterReceiver(batteryReceiver);
super.onDestroy();
}
public int onStartCommand (Intent intent, int flags, int startId) {
return START_STICKY;
}
}
您可以通过将服务置于前台来降低服务被杀的可能性(谷歌"前台服务")。
正如http://developer.android.com/preview/behavior-changes.html#bg-opt中所提到的,一些隐含的意图正在消失,所以要做好准备ACTION_BATTERY_CHANGED
将会在其中。