1

こんにちは、私は Battery Android アプリケーションを開発しています。アプリケーションを閉じた後、ステータスバーにバッテリーレベル(%)を表示します。バックグラウンド プロセスとして実行されるサービス クラスを開始し、いくつかのコードを配置します。Notificationservice.java

 public void onCreate(){
        super.onCreate();
        IntentFilter filter= new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        Intent batteryStatus= getApplicationContext().registerReceiver(null, filter);
        int status= batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        batteryLevel= String.valueOf(status);

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    //make the toast message
    Toast.makeText(this, "Service Started"+batteryLevel+"%", Toast.LENGTH_LONG).show();

    //show the notification on status bar
    NotificationManager nm=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    Intent intent2= new Intent(this, MainActivity.class);
    PendingIntent pendingIntent= PendingIntent.getActivity(getApplicationContext(), 0, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
    NotificationCompat.Builder mbuilder= new 
            NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.ic_launcher)
    .setContentTitle("Battery Level: "+batteryLevel+"%")
    .setContentText("Battery Level: "+batteryLevel+"%")
    .setContentIntent(pendingIntent);

    nm.notify(notificationID, mbuilder.build());
    return START_STICKY;
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
        Toast.makeText(getApplicationContext(), "service Destroy", Toast.LENGTH_SHORT).show();
    }

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

}

MainActivity.java 内

rotected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    b1= (Button) findViewById(R.id.button1);
    b2= (Button) findViewById(R.id.button2);
    tv= (TextView) findViewById(R.id.textView1);
    createListener();
}


private void createListener() {
    b1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            startService(new Intent(getBaseContext(), Notificationservice.class));
        }
    });

    b2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            stopService(new Intent(getBaseContext(), Notificationservice.class));

        }
    });

}

アプリケーションの実行を押すと正常に実行されますが、開始を押すとサービスボタンのバッテリーレベルがステータスバーに表示されますが、変更/更新されず、同じままです。友達助けてください、どうすればいいですか....???

4

1 に答える 1

0

ブロードキャストレシーバーからサービスまたは通知を開始する必要があります.バッテリーレベルを取得するためにブロードキャストを登録するだけです..そしてレシーバーの onreceive() メソッドから..通知を呼び出すか、サービスを開始します..

于 2014-10-26T14:11:39.577 に答える