5

Activity現在のクラスから特定の時間に実行されているバックグラウンドServiceクラスにデータを送信するにはどうすればよいですか? 始めようとしましたが、授業Intent.putExtras()で理解できませんでしたService

Activityを呼び出すクラス内のコードService

Intent mServiceIntent = new Intent(this, SchedulerEventService.class);
        mServiceIntent.putExtra("test", "Daily");
        startService(mServiceIntent);

Serviceクラス内のコード。と を入れてみましonBind()onStartCommand()。これらのメソッドはいずれも値を出力しません。

@Override
public IBinder onBind(Intent intent) {
    //Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();

    //String data = intent.getDataString();

    Toast.makeText(this, "Starting..", Toast.LENGTH_SHORT).show();

    Log.d(APP_TAG,intent.getExtras().getString("test"));


    return null;
}
4

2 に答える 2

4

あなたのコードはonStartCommand. bindServiceアクティビティを呼び出さない場合、アクティビティは呼び出されず、代わりにonBind使用しますgetStringExtra()getExtras()

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    Toast.makeText(this, "Starting..", Toast.LENGTH_SHORT).show();
    Log.d(APP_TAG,intent.getStringExtra("test"));
    return START_STICKY; // or whatever your flag
}
于 2013-03-05T21:22:39.790 に答える
1

Intent に入れることができるプリミティブ データ型を渡したい場合は、IntentService を使用することをお勧めします。IntentService を開始するには、アクティビティを次のように入力します。

startService(new Intent(this, YourService.class).putExtra("test", "Hello work");

次に、IntentService クラスを拡張するサービス クラスを作成します。

public class YourService extends IntentService {

String stringPassedToThisService;

public YourService() {
    super("Test the service");
}

@Override
protected void onHandleIntent(Intent intent) {

    stringPassedToThisService = intent.getStringExtra("test");

    if (stringPassedToThisService != null) {
        Log.d("String passed from activity", stringPassedToThisService);
    // DO SOMETHING WITH THE STRING PASSED
    }
}
于 2013-03-05T21:48:15.750 に答える