デバイスの起動後にサービスを開始しようとしています。問題は、サービスが通常このように取得するいくつかの引数を必要とすることです。
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);
}
};