0

J'essaie de régler l'alarme en utilisant mon application et pour cela j'utilise l'intention commune du réveil comme décrit here.Pourquoi startActivityForResult ne renvoie aucun résultat de l'intention AlarmClock.ACTION_SET_ALARM?

Voici mon code:

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); 
     } 
} 

Voilà 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(); 
      } 
     } 
} 

Le problème est ici que je reçois ce message Toast: resultCode not OK. Donc, pourquoi startActivityForResult ne retourne aucun résultat?

+0

Parce que très probablement votre activité sera tuée avant le réveil. C'est une tâche longue (par exemple 15 heures). Le retour du résultat au démarrage de l'activité est mauvais pour la conception d'alarme je pense. C'est pourquoi il ne retourne aucun résultat. –

Répondre

3

Cette action Intent est not documented to return anything. Par conséquent, les implémentations n'ont pas besoin d'utiliser setResult() et vous obtenez donc la réponse par défaut.

Remplacez votre startActivityForResult() avec startActivity() et retirez votre code de traitement des résultats de onActivityResult() lié à cette startActivityForResult(). Par ailleurs, remplacez tous vos appels getBaseContext() par this.

+0

alors comment puis-je confirmer que l'alarme a été réglée avec succès pour que je puisse montrer du texte à l'utilisateur? –

+0

@HammadNasir: Vous ne pouvez pas. Si l'utilisateur choisit de définir une alarme est entre l'utilisateur et l'application qui gère votre action 'ACTION_SET_ALARM'. – CommonsWare

+0

Alors, que puis-je faire si je veux montrer du texte de confirmation à l'utilisateur? –