Intent.getStringExtra()始终返回null

时间:2013-10-26 22:08:20

标签: android android-intent

我有一项服务,我有:

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,导致我的活动中只有一个实例一次存活。所以我必须进入onStart(),因为onCreate()只被调用一次。基本上我一直在寻找一种可靠的方式将数据从我的服务发送到活动一整天但是徒劳无功。你能提出什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果您需要将某些值从服务传递到任何活动类,则应使用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