首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接收类不识别ACTION_BATTERY_CHANGED

接收类不识别ACTION_BATTERY_CHANGED
EN

Stack Overflow用户
提问于 2016-04-18 17:03:01
回答 1查看 713关注 0票数 0

当电池充放电时,我想播放一个声音作为通知。

在我的接收类中,我又写了2个“电源连接”和“电源断开”的通知,它们工作正常!

但我的接收器不认识ACTION_BATTERY_CHANGED。我已经搜索了很多,我发现我必须以编程方式注册它。

问题是我需要在没有任何活动的情况下注册它。因为我想通知"Battery_Fully_charged“,即使我的程序没有运行。

我如何在我的接收器("MyReceiver.class")中注册这样的东西?

下面是我找到的示例代码,它可以工作。但我想在没有活动的情况下去做。

代码语言:javascript
复制
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));
  }
}

编辑:服务和大写接收者有什么区别?我试过了,但还是没有得到任何结果

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-18 17:57:36

来自文档

只有通过Context.registerReceiver()显式注册才能通过清单中声明的组件来接收它。..。

这意味着:

1)只有BroadcastReceiver才能接收到这些意图。

2)只有动态注册的接收机才能接收到这些意图。

您已经了解了如何在活动中这样做--让我们看看服务:

代码语言:javascript
复制
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;
    }
}

您可以通过将服务放到前台(google“前台服务”)来减少该服务被杀死的可能性。

正如在http://developer.android.com/preview/behavior-changes.html#bg-opt中提到的,一些隐含的意图正在消失,因此要做好准备,ACTION_BATTERY_CHANGED将成为其中之一。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36700088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档