0

我想用我的應用程序設置鬧鐘和我使用鬧鐘共同意圖爲描述here爲什麼startActivityForResult不會從AlarmClock.ACTION_SET_ALARM意圖返回任何結果?

這裏是我的代碼:

public void createAlarm(String message, int hour, int minutes) { 
     Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM) 
       .putExtra(AlarmClock.EXTRA_MESSAGE, message) 
       .putExtra(AlarmClock.EXTRA_HOUR, hour) 
       .putExtra(AlarmClock.EXTRA_MINUTES, minutes) 
       .putExtra(AlarmClock.EXTRA_SKIP_UI, true); 
     if (intent.resolveActivity(getPackageManager()) != null) { 
      startActivityForResult(intent, SET_ALARM_REQUEST_CODE); 
     } 
} 

這裏的onActivityResult()

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == SET_ALARM_REQUEST_CODE) { 
      if (resultCode == RESULT_OK) { 
       if (data != null) { 
        Toast.makeText(getBaseContext(), "Alarm for " + data.getData().toString() + " has been set successfully!", Toast.LENGTH_SHORT).show(); 
       } else { 
        Toast.makeText(getBaseContext(), "data is null", Toast.LENGTH_SHORT).show(); 
       } 
      } else { 
       Toast.makeText(getBaseContext(), "resultCode not OK", Toast.LENGTH_SHORT).show(); 
      } 
     } 
} 

這裏的問題是,我得到這個消息ToastresultCode not OK

那麼,爲什麼startActivityForResult沒有返回任何結果呢?

+0

因爲很可能你的活動將在鬧鐘之前死亡。這是很長時間的任務(例如15小時)。將結果返回到開始活動是我認爲不好的設計。這就是爲什麼它不會返回任何結果。 –

回答

3

Intent行動not documented to return anything。因此,實現不需要使用setResult(),因此您將獲得默認響應。

替換您startActivityForResult()startActivity(),並從onActivityResult()綁到startActivityForResult()刪除您的結果處理代碼。

BTW,更換所有getBaseContext()電話與this

+0

那麼如何確認報警設置成功,以便我可以向用戶顯示一些文字? –

+0

@HammadNasir:你不行。用戶是否選擇設置鬧鐘位於用戶和處理您的「ACTION_SET_ALARM」操作的應用程序之間。 – CommonsWare

+0

那麼,如果我想向用戶顯示一些確認文本,我該怎麼辦? –

相關問題