2013-10-26 127 views
3

我有,我有一个服务:Intent.getStringExtra()始终返回null

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()只被调用一次。基本上我一直在寻找一种可靠的方式将我的服务的数据发送到整个活动一整天,但徒劳无功。你能提出一些建议吗?

回答

2

如果您需要从服务通过一些价值的任何活动类,你应该使用BroadcastReceiver.

第一步),您需要在广播接收器先注册该活动。为此,您需要为此定义动作

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 
+0

虽然你的答案是伟大的,但其实我是使用SharedPreference,使我的服务,哪些是在同一个包的活动之间的共享变量。我知道它看起来很尴尬,但它确实有效。 –