4

アクティビティとサービスを備えたアプリケーションがあります。アクティビティに値を保存し、サービスで取得する必要があります。

アクティビティでSharedPreferencesを使用して値を保存できますが、BroadcastReceiverで値を取得しようとすると、 getPreferencesがサービスに対して未定義であると表示されます。

BroadcastReceiverで自分の値を取得するにはどうすればよいですか?

4

2 に答える 2

10

Service元の質問のからへの変更を反映するように編集BroadcastReceiverされました。

getPreferences(int mode)使用する代わりにActivity...

getSharedPreferences(String name, int mode).

このgetPreferences(int mode)メソッドは上記の便利なメソッドであり、単にActivityクラス名をnameパラメーターとして渡します。これは、Activity他のアプリコンポーネントに対してグローバルである必要があるプリファレンスではなく、それ自体の内部プリファレンスを格納するために実際に使用する必要があることを意味します。

メソッドの場合BroadcastReceiver、パラメータonReceive(...)が渡されるため、を使用して保存されたを取得できます。Contextcontext.getSharePreferences(<some_name>, <mode>)SharedPreferencesActivity

于 2012-08-07T14:22:37.920 に答える
0
public class AndroidWalkthroughApp4 extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    @Override
    public void onResume() {        
        // get EditText object
        EditText editText = (EditText)this.findViewById(R.id.edit_text);

        // get preferences object
        SharedPreferences prefs = this.getPreferences(MODE_PRIVATE);
        // set text to our saved value
        editText.setText(String.valueOf(prefs.getInt("chars", 0)));

        // don't forget to do this, or your app will crash!
        super.onResume();
    }

    @Override
    public void onPause() {
        // get EditText object
        EditText editText = (EditText)this.findViewById(R.id.edit_text);

        // get preferences object
        SharedPreferences prefs = this.getPreferences(MODE_PRIVATE);
        // create editor from preferences object
        SharedPreferences.Editor editor = prefs.edit();
        // save and write length of EditText 
        editor.putInt("chars", editText.getText().length());
        editor.commit();

        // don't forget this either!
        super.onPause();
    }
}
于 2015-05-17T09:23:09.310 に答える