0

ねえ私はbroadcastreceiverからサービスクラスに変数受信を渡す必要があるアプリに取り組んでいます

私はこの投稿を見 ました。Androidでブロードキャストレシーバーからアクティビティに値を渡す方法は? しかし、それは機能しません。

これが私のコードです

public class BatteryReceiver extends BroadcastReceiver {
int batteryLevel;
int batteryScale;
private int status;
private boolean isCharging;
@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    Log.v("test battery", "battery:" + batteryLevel);
    batteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
    batteryScale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0);

    //Log.v("charging state", "state:" + isCharging);
    status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
    isCharging = status == BatteryManager.BATTERY_STATUS_FULL||status == BatteryManager.BATTERY_STATUS_CHARGING;

    Intent service = new Intent(context, MyService.class);      
    service.putExtra("BatteryLevel", batteryLevel);
    service.putExtra("BatteryScale", batteryScale);
    service.putExtra("Charging", isCharging);
context.startService(service);
}

}

3変数を受け取るサービスクラス

public class MyService extends Service {
int batteryLevel;
int batteryScale;
private boolean isCharging;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    batteryLevel = intent.getIntExtra("BatteryLevel", batteryLevel);
    batteryScale = intent.getIntExtra("BatteryScale", batteryScale);
    isCharging = intent.getBooleanExtra("Charging", isCharging);

    Log.v("test battery", "battery:" + batteryLevel);
    Log.v("charging state", "state:" + isCharging);

           //other method

           return Service.START_STICKY;
}

最後に、ログには常にバッテリーレベルが0で、充電状態がfalseであることが示されます。これは、バリバールがサービスに渡されないことを意味します。

人々が私を案内するように、私は上記のように変数に値を割り当てましたが、これはまだ機能しません

これが私のメインフェストです、ここに何か問題があるのではないかと思います

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".MyApp">
    </activity>

    <service 
        android:name=".MyService"
        android:enabled="true">
    </service>

    <receiver 
        android:name=".BatteryReceiver">
        <intent-filter>
             <action android:name="android.intent.action.BATTERY_CHANGED"></action>
        </intent-filter>
    </receiver>

</application>

そしてレシーバー部分では、eclispeは「エクスポートされたレシーバーは許可を必要としません」を返します

私のアプリでは、サービスはバックグラウンドで実行され続け、braodcastreceiverから変数を受信して​​関数を実行しようとします

どちらの部分が間違っているのかわかりません。エラーが発生した場合はお知らせください。ありがとうございます。

4

1 に答える 1

1

あなたは以下のようなことをするべきです、どのようにあなたはそれらに評価することなく価値を持っている変数を期待することができますか

batteryLevel   =    intent.getIntExtra("BatteryLevel", batteryLevel);
 batteryScale  =       intent.getIntExtra("BatteryScale", batteryScale);
   isCharging   =       intent.getBooleanExtra("Charging", isCharging);

レシーバーがサービスを呼び出す場所から。

startService(intent);//このインテントは、uが割り当て/値を設定したものである必要があります。

intent.putExtra("BatteryLevel", batteryLevel);
intent.putExtra("BatteryScale", batteryScale);
intent.putExtra("Charging", isCharging);

上記のコードのように、インテントに値を設定していますが、このインテントをサービスに渡さず、呼び出しstartService(intent);、サービス中にこれらの値をonstart()メソッドで取得します

レシーバーでuはサービス名をWifiService.classとして設定しており、サービス名はMyServiceです。単一の名前にする

于 2012-07-19T05:58:10.383 に答える