0

デバイスの起動後にサービスを開始しようとしています。問題は、サービスが通常このように取得するいくつかの引数を必要とすることです。

public class ServiceClass extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        searchString = (String) intent.getExtras().get(GET_SEARCHSTRING_AFTER_START);
        [...]   
        return START_STICKY;

    public  static final String GET_SEARCHSTRING_AFTER_START = "SEARCHVALUE";

    public class OnStartupStarter[...]

}

しかし、デバイスの起動時にBroadcastReceiverを介してサービスを開始する必要がある場合、これはアクティビティによって指定されるため、searchStringを配置できません。デバイスの起動後にサービスを開始する場合、サービスは、デバイスの電源を切る前のsearchStringで開始する必要があります。

BroadcastReceiverは、サービスのクラスのサブクラスです。

public static class OnStartupStarter extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        /* TODO: Start the service with the searchString it 
         * had before the device has been turned off...
         */
    }
}


通常、サービスは次のように開始されます。

private OnCheckedChangeListener ServiceSwitchCheckedStatusChanged 
= new OnCheckedChangeListener() {
     public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        Intent s = new Intent(getBaseContext(), ServiceClass.class);

        s.putExtra(ServiceClass.GET_SEARCHSTRING_AFTER_START, <ARGUMENT>);
        if(isChecked)
            startService(s);
        else
            stopService(s);
    }
};
4

1 に答える 1

3

SharedPreference最後の検索文字列をアクティビティメソッドに保存し、ブロードキャストonPauseを受信したときに最後の検索文字列を取得して、通常どおりサービスを開始します。BootCompleted

アクティビティ:

protected void onPause() {
    super.onPause();

    SharedPreferences pref = getSharedPreferences("my_pref", MODE_PRIVATE);
    SharedPreferences.Editor editor = pref.edit();
    editor.putString("last_search", mLastSearch);
    editor.commit();
}

ブロードキャストレシーバー:

public static class OnStartupStarter extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
            SharedPreferences pref = context.getSharedPreferences("my_pref", MODE_PRIVATE);
            String lastSearch = pref.getString("last_search", null);
            if (lastSearch != null) {
                // TODO: Start service
            }
        }
    }
}
于 2012-08-03T18:26:56.340 に答える