2

バッテリーがある程度のレベルに達するとwifiが自動的にシャットダウンするアプリを作成しています。画面がオンのときはアプリが正常に動作しますが、画面がロックされているときは何もしません。

私のアプリは、アクティビティを開始し、ユーザーがボタンをクリックしてサービスを開始すると、サービスはブロードキャストレシーバーを登録して現在のバッテリーレベルを取得し、ブロードキャストレシーバーはバッテリーレベルが制限に達したかどうかを確認し、完了したwifiをシャットダウンするかどうかを決定します

画面がオンかオフかを調べるために isScreenOn() を使用しようとしましたが、これも機能しません

ここに私のコードがあります

public class BatteryMonitor extends Service {
/*declear variables*/

private BroadcastReceiver batteryReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent){

/* get battery level*/  


    //Check is screen is on or not
    boolean isScreenOn = powermanager.isScreenOn();

    //set as 90 just for test function//
    if(batteryLevel<=90){
        if(isScreenOn==true){
                if(isCharging == true && wifimanager.isWifiEnabled()){
                    //not do anything
                }else if(isCharging == false && wifimanager.isWifiEnabled()){
                    wifimanager.setWifiEnabled(false);  
                }
        }else{
                if(isCharging == true && wifimanager.isWifiEnabled()){
                    //not do anything
                }else if(isCharging == false && wifimanager.isWifiEnabled()){
                    wifimanager.setWifiEnabled(false);  
                }
        }
    }

}

};

public void onStart(Intent intent, int startId) {
wifimanager = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);
powermanager = (PowerManager) getSystemService(Context.POWER_SERVICE);
registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
};

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

}
4

1 に答える 1

3

レシーバー用に別途クラスを作成し、バッテリー交換アクション用のマニフェストファイルに登録します。その後、画面がオフの場合でも機能します。

放送受信機 はこのリンクを読んでください。

Receiver にメッセージを送信する場合は sendBroadcast が必要です。Receiver のマニフェストに適切な Action String を追加したことを確認してください。

于 2012-07-13T05:56:05.107 に答える