【问题标题】:Get Battery Level with BroadcastReceiver in Android Service在 Android 服务中使用 BroadcastReceiver 获取电池电量
【发布时间】:2013-01-18 18:58:14
【问题描述】:

我有一个代码,我需要获取我的 Android 设备的电池电量,但我有一个大问题。我有一个 Android 服务,我可以在其中获取电池电量并通过 UDP 发送。

这是我的服务代码:

public class Servico extends Service {

String bateria = "Nada";

/*
 * Recupera nível de bateria
 */
private BroadcastReceiver BatInfoReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context arg0, Intent intent) {
        int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
        bateria = String.valueOf(level);
    }
};

public void onCreate() {
    super.onCreate();
    this.registerReceiver(this.BatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(getApplicationContext(), "Command=" + bateria + "%", Toast.LENGTH_LONG).show();
    stopSelf();
    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
    unregisterReceiver(BatInfoReceiver);
}

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

}

我的问题是:我无法获得关卡!我在 BatInfoReceiver 中的 onReceive 方法中放置了一个 BreakPoint,但此代码仅在执行 onStartCommand 之后执行,并且需要将电池电量的值用于 onStartCommand。

我该怎么做?

【问题讨论】:

  • 我把 Toast 放到代码里只是为了测试!!仅用于测试变量“bateria”的值。

标签: android service battery batterylevel


【解决方案1】:

您是否在您的主要文件中添加了以下权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

并将您的 onReceived 方法更改为:

private BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive( Context context, Intent intent )
            {
                int level = intent.getIntExtra( "level", 0 );
                bat= String.valueOf(level) + "%" ;
            }
    };

要获取电池级别,请使用以下代码:

registerReceiver( batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED) );

【讨论】:

  • 这是我对清单文件的权限::
  • 将您的 onRevive 消息更改为上面添加的代码,并使用它下面的代码行来获取电池电量。
【解决方案2】:

看看这个,它将为您提供所需的电池电量,以便您开始服务。只需使用BatteryManager.EXTRA_LEVEL 作为从意图中获取关卡的关键

http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

【讨论】:

    【解决方案3】:

    我的问题的解决方案是tyczj的回答,我刚刚适应了我的问题。

    我的新代码:

    public void onCreate() {
        super.onCreate();
    
        //registerReceiver(BatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    
        IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        Intent batteryStatus = getApplicationContext().registerReceiver(null, ifilter);
    
        // Are we charging / charged?
        int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        bateria = String.valueOf(status);
    
    }
    

    【讨论】:

    • 那么根本就没有广播接收器?
    猜你喜欢
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多