2017-11-22 5 views
0

私はアンドロイドの開発に新しいです、私の問題を解決するために親切に助けてください。 ブロードキャストレシーバーからの値を既に開始しました。アクティビティ

  1. は、私がこのプログラムを実行され、放送受信機

  2. 私は再び主な活動でそれを取得することができません直面してる問題で バッテリーパーセントをトーストすることができているバッテリの割合を取得します。

  3. 自分のアプリケーション内のすべての活動は、だから私は代わりに、活動自体にそれを持っていることの別々のJavaクラス・ファイルとして保管しているバッテリレベルのために

  4. を放送 受信機を使用する必要があるため。

  5. どのように放送受信機から動的に登録する主な活動を値を送信し、どこにバッテリーの値を取得するために

MainActivity

public class MainActivity extends AppCompatActivity { 
public static final String BATTERY_BROADCAST_ACTION = Intent.ACTION_BATTERY_CHANGED; 
Context context; 
private IntentFilter mIntentFilter; 
private BroadcastReceiver myReceiver; 
TextView txtBattery; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button btn = (Button) findViewById(R.id.btnCall); 
    txtBattery = (TextView) findViewById(R.id.txtBattery); 
    myReceiver = new MyReceiver(); 
    registerReceiver(myReceiver, new 
    IntentFilter(BATTERY_BROADCAST_ACTION)); 
}} 

BroadCast Receiver

public class MyReceiver extends BroadcastReceiver { 


@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO: This method is called when the BroadcastReceiver is receiving 
    // an Intent broadcast. 
    Bundle extras = intent.getExtras(); 
    int level = extras.getInt(BatteryManager.EXTRA_LEVEL); 
    Toast.makeText(context,"Battery = " + level,Toast.LENGTH_SHORT).show(); 
}} 

答えて

0

ますイベントバスシステムを採用することができますあなたの問題を解決してください。あなたは、バッテリレベルの変更のためのイベントを作成し、EventBus

ファーストを使用することができます。

public class BatteryLevelEvent { 
    private int batteryLevel; 

    public BatteryLevelEvent(int batteryLevel) { 
    this.batteryLevel = batteryLevel; 
    } 

    public int getBatteryLevel() { 
    return this.batteryLevel; 
    } 
} 

第二に、バッテリーレベルの変更があるたびに、ポストイベント:

public class MyReceiver extends BroadcastReceiver { 
    ... 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    Bundle extras = intent.getExtras(); 
    int level = extras.getInt(BatteryManager.EXTRA_LEVEL); 
    EventBus.getDefault().post(new BatteryLevelEvent(level)); 
    } 
} 

を今、イベントを受け取る必要があります。イベントを受信したいそれぞれのアクティビティは、が最初に登録されている必要があります。このようなもので、それをあなたを登録することができますすることができます、あなたはすべての活動にイベントを受信したい場合は

public class YourActivity extends AppCompatActivity { 
    ... 

    @Subscribe 
    public void onMessageEvent(BatteryLevelEvent event) { 
    int batteryLevel = event.getBatteryLevel(); 
    // do something with the battery level here. 
    } 
} 

public class YourActivity extends AppCompatActivity { 
    ... 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_layout); 
    ... 
    EventBus.getDefault().register(this); 
    } 

    // need to unregister when activity is not in foreground. 
    @Override 
    public void onPause() { 
    super.onPause(); 
    EventBus.getDefault().unregister(this); 
    } 
} 

最後に、あなたがイベントを受け取るためにを購読に必要上記の登録、登録解除、および購読を伴う基本クラスアクティビティを作成します。次に、その基本クラスからすべてのアクティビティを派生させることができます。

+0

あなたのソリューションに感謝します。私はあなたに知らせようとします。 –

+0

ありがとうございました。それは私の問題を解決する。非常にありがとうございます –

+0

あなたは大歓迎です;) –

関連する問題