2014-09-26 75 views
1

我正在發出警報,服務是由警報啓動的。我想要服務接收額外的數據,所以使用谷歌搜索我將標誌設置爲Intent.FILL_IN_DATA。下面是我的代碼(僅重要部分顯示) (我有幾個報警模式,和不同的服務被稱爲)Android getExtra()始終獲取服務中的默認值

public static void setAlarm(Context mContext, int mode){ 
    if(mode==A){ 
       intent = new Intent(mContext, AService.class); 
      } 
      else{ 
       intent = new Intent(mContext, BService.class); 
       intent.putExtra(NOTI_MODE, mode); 
      } 
    PendingIntent pIntent = PendingIntent.getService(mContext, 0, intent,Intent.FILL_IN_DATA); 
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 
      Log.d("set alarm","alarm 4.4"); 
      alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent); 
     } else { 
      Log.d("set alarm","alarm 4.4 under"); 
      alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent); 
     } 
} 
public static void cancelAlarm(Context mContext){ 
     AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); 
     PendingIntent pIntent = PendingIntent.getService(mContext, 0, new Intent(mContext, AService.class),Intent.FILL_IN_DATA); 
     alarmManager.cancel(pIntent); 

     pIntent = PendingIntent.getService(mContext, 0, new Intent(mContext, BService.class),Intent.FILL_IN_DATA); 
     alarmManager.cancel(pIntent); 

}

服務端代碼(編輯:此代碼是BService類。AService不需要接收附加。)

public int onStartCommand(Intent intent, int flags, int startId) { 
     int notiMode=intent.getIntExtra(AlarmManagerHelper.NOTI_MODE, -1); 
} 

但是,結果始終是-1,這意味着沒有額外正被接收。

我的代碼有什麼問題?我在Google上搜索幾個小時,沒有任何希望。

如果您有任何想法請幫助。

在此先感謝。

編輯:setAlarm方法是

公共類AlarmManagerHelper延伸的BroadcastReceiver {}類。

和下面是從AndroidManifest

<receiver android:name="com.example.test.AlarmManagerHelper" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
    </receiver> 

當我使用

pIntent = PendingIntent.getService(mContext,0,新意圖(mContext,BService.class),0);

代替

pIntent = PendingIntent.getService(mContext,0,新意圖(mContext,BService.class),Intent.FILL_IN_DATA);

在cancelAlarm(),服務獲取額外的所有權利(但報警不取消當然)

我不知道爲什麼setAlarm()當我改變cancelAlarm()不工作..

+0

可以共享包含您的公共靜態無效setAlarm方法的類定義是什麼? – 2014-09-26 22:22:48

+0

我添加了類信息,但我不確定這是什麼意思。(其實我不是英語母語的人,我不確定'class definition'的意思是什麼..) – kwmaeng 2014-09-27 00:26:50

回答

0

我找到了解決辦法。很尷尬..我應該在發佈問題之前爲自己尋找更多...

將Intent.FILL_IN_DATA更改爲PendingIntent.FLAG_UPDATE_CURRENT,現在它的工作原理與魅力類似。

不知道爲什麼,但如果你是從同一個問題的痛苦,請嘗試此解決方案:)

0

根據你發佈的代碼,你有兩個服務(AService和BService)。

我猜你正在共享的代碼片段是針對你的AService的?

我覺得你setAlarm方法的頂部應該是:

public static void setAlarm(Context mContext, int mode) 
{ 
    if(mode==A) 
    { 
     intent = new Intent(mContext, AService.class); 

     // NOTE: Add this line! 
     intent.putExtra(NOTI_MODE, mode); 
    } 
    else 
    { 
     intent = new Intent(mContext, BService.class); 
     intent.putExtra(NOTI_MODE, mode); 
    } 

    // snipped rest of code in this method 
} 
+0

對不起,沒有足夠的信息。這段代碼來自BService。 AService不需要額外獲取。我將編輯我的問題 – kwmaeng 2014-09-27 00:28:32