7

サービスからCallReceiverクラスにint値を渡そうとしていますが、残念ながら、別の値を設定した後でも、CallReceiver.valueは常に0になります。それをパラメーターとしてコンストラクターに渡そうとしているときの状況はまったく同じであり、サービスから呼び出されるセッターメソッドでも同じです。そこにデータを渡す方法は本当にありませんか?

サービス:

SharedPreferences settings = getSharedPreferences("SETTINGS", 0);
    int value = settings.getInt("value1", 0); // here the correct value is present, not 0.
    CallReceiver mCallReceiver = new CallReceiver();
    CallReceiver.value = value;  

受信者:

public class CallReceiver extends BroadcastReceiver  {

public int value;

public CallReceiver(int value)  {
    this.value = value;
}

public CallReceiver()   {

}


@Override
public void onReceive(Context context, Intent intent) {


            Log.v("value", String.valueOf(value)); // here "value" = 0.


        }

     }
4

1 に答える 1

18

CallReceiver mCallReceiver=new CallReceiver();インスタンスはインテントの受信には使用されません。代わりに、Androidは毎回新しいインスタンスを作成します。また、0は初期化されていない整数変数のデフォルト値です。

これが確実に行われるようにするには、valueフィールドにデフォルト値を割り当てます。

public class RReceiver extends BroadcastReceiver {
    public int value=5;
    //...
}

そしてあなたの値は常に5に等しくなります。

にデータを渡す場合は、ブロードキャストBroadcastReceiverしているデータに追加しIntentます。

//in your service
Intent broadcastedIntent=new Intent(this, CallReceiver.class);
broadcastedIntent.putExtra("VALUE", 100500);
sendBroadcast(broadcastedIntent);

そして、あなたのCallReceiver

@Override
public void onReceive(Context context, Intent intent) {
    int value=intent.getIntExtra("VALUE", 0);
}
于 2013-01-17T15:58:32.800 に答える