0

次のコードに4つの整数があり、そのうちの1つが「レベル」であることがわかりません。コードのどこかでその値を変更して後で取得しようとすると、デフォルト値が取得されるので、何かありますか。このコードが間違っているか、何かが恋しいですか

public class Battery_Info extends Activity {
    int scale = -1;
    int level = -1;
    int voltage = -1;
    int temp = -1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_battery__info);
    this.setTitle("Battery Information");
    IntentFilter filter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    final NotificationManager ntifymgr=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    BroadcastReceiver receive=new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            scale=intent.getIntExtra(BatteryManager.EXTRA_SCALE,-1);
            level=intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
            voltage=intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);
            temp=intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
            TextView t=(TextView)findViewById(R.id.textView5);
            t.setText(""+scale);
            t=(TextView)findViewById(R.id.textView6);
            t.setText(""+level, BufferType.EDITABLE);
            t=(TextView)findViewById(R.id.textView7);
            t.setText(""+voltage);
            t=(TextView)findViewById(R.id.textView8);
            t.setText(""+temp);
        }
    };
    registerReceiver(receive, filter);
    final int Notif_ID=56734;
    Notification note= new Notification(R.drawable.ic_launcher, "Battery Notification", System.currentTimeMillis());
    note.flags=Notification.FLAG_ONGOING_EVENT;
    PendingIntent intent=PendingIntent.getActivity(this, 0, new Intent(this,Battery_Info.class),PendingIntent.FLAG_CANCEL_CURRENT);
    note.setLatestEventInfo(this, "BatPer", "Battery Level: "+level+"%", intent);
    ntifymgr.notify(Notif_ID, note);
}

levelの値を変更すると変更され、textviewに表示されますが、通知で使用するとデフォルト値が表示されます

4

2 に答える 2

1

レベルがデフォルト値( "バッテリーレベル:" + level + "%")であるonCreateで通知用の文字列を作成します。後でレベルを変更します。ただし、通知文字列はすでにデフォルト値で作成されています。

レベルが変更されたら、現在のレベル値で新しい通知メッセージを作成し、新しいテキストで通知を更新する必要があります。

于 2013-02-18T13:46:01.290 に答える
0

私は通知管理の専門家ではないため、これで問題が解決するかどうかはわかりませんが、Battery_Infoオブジェクトを使用してシステム内で一意の情報を保存している場合は、4つのメンバーを静的に設定します。

そうすることで、(何らかの理由で)新しいBattery_Infoオブジェクトを作成した場合でも、メンバーは最後の値を保持し、デフォルト値にリセットされません。

于 2013-02-18T14:21:45.237 に答える