2013-10-26 217 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,使我的服務,哪些是在同一個包的活動之間的共享變量。我知道它看起來很尷尬,但它確實有效。 –