3

私が持っているサービスがあります:

Intent intent = new Intent(ClipboardWatcherService.this, DeliDict.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("searchTerm", searchTerm);
startActivity(intent);

そして私の活動では:

    @Override
    public void onStart()
    {
            super.onStart();

            Intent intent = getIntent();
            String clipboardSearchTerm = intent.getStringExtra("searchTerm");
            ...
    }

しかし、intent.getStringExtra()は常に null を返します。

注: サービス (アクティビティ クラスの外部) から StartActivity() を呼び出しているため、Intent.FLAG_ACTIVITY_NEW_TASK を定義して、アクティビティのインスタンスを一度に 1 つだけ有効にする必要があります。onCreate() は 1 回しか呼び出されないため、onStart() 内に移動する必要があります。基本的に、サービスからアクティビティにデータを 1 日中送信する信頼できる方法を探していましたが、無駄でした。何か提案できますか?

4

1 に答える 1

2

Serviceから任意のActivityクラスに値を渡す必要がある場合は、使用する必要がありますBroadcastReceiver.

Step1) まず、そのBroadcastReceiverをその Activityに登録する必要があります。このためには、そのためのアクションを定義する必要があります。

public static final String YOUR_ACTION_STRING = "com.test.android.service.receiver";

今すぐ受信者を登録する

registerReceiver(receiver, new IntentFilter("YOUR_ACTION_STRING"));

ここで値を受け取ります

private BroadcastReceiver receiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
      Bundle bundle = intent.getExtras();
      if (bundle != null) {
        String clipboardSearchTerm = intent.getString("searchTerm");

      }
    }
  };

ステップ 2)サービスから、メッセージをブロードキャストする必要があります。

   Intent intent=new Intent();
   intent.setAction("YOUR_ACTION_STRING");
   intent.putExtra("searchTerm", searchTerm);
   sendBroadcast(intent);//Broadcast your message to registered Activity
于 2013-10-27T01:46:27.170 に答える