Intention de lancer l'application horloge sur Android
Je suis confronté à un problème avec un widget d'horloge que j'ai fait. Je veux que l'utilisateur de toucher l'horloge et le lancement de l'application horloge sur le téléphone. c'est le code:
//this worked on my nexus 2.1
if(VERSION.SDK.equals("7")){
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
Intent AlarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setComponent(new ComponentName("com.android.deskclock", "com.android.deskclock.DeskClock"));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, AlarmClockIntent, 0);
views.setOnClickPendingIntent(R.id.Widget, pendingIntent);
AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views);
}
//this worked on my nexus +froyo2.2
else if(VERSION.SDK.equals("8")){
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
Intent AlarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setComponent(new ComponentName("com.google.android.deskclock", "com.android.deskclock.DeskClock"));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, AlarmClockIntent, 0);
views.setOnClickPendingIntent(R.id.Widget, pendingIntent);
AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views);
}
//this worked on my htc magic with 1.5 and 1.6
else{
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
Intent AlarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setComponent(new ComponentName("com.android.alarmclock", "com.android.alarmclock.AlarmClock"));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, AlarmClockIntent, 0);
views.setOnClickPendingIntent(R.id.Widget, pendingIntent);
AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views);
}
Que j'ai faite ci-dessus de sorte que la quand je touche de l'horloge ouvre les paramètres de l'alarme. Mais n'est pas universelle.
J'ai trouvé que sur les droïdes avec 2.2 ne fonctionne pas. Il doit y avoir une meilleure solution que de créer une instruction if pour tous les téléphones android saveur je le monde. En Plus je ne sais pas les noms de tous les.
Quelqu'un sait comment faire pour surmonter cette s'il vous plaît aider.
source d'informationauteur John
Vous devez vous connecter pour publier un commentaire.
Ce code fonctionne pour mon widget d'horloge.
De cette façon, je peux courir un gestionnaire par défaut de l'horloge.
À suivre jusqu'à Mayra réponse, la classe
android.provider.AlarmClock
a la bonneIntent
pour cela, mais il est disponible seulement à l'API de niveau 9 et au-dessus de. (Au moins quelqu'un de chez Google est à l'écoute pour les demandes de ce genre!)Pour le lancement de l'application horloge de votre widget le code suivant fonctionne:
Vous avez aussi besoin de cette autorisation:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
La bonne façon de commencer une activité en dehors de votre application est d'utiliser une intention Implicite. Avec une intention implicite vous ne fournissez pas une classe spécifique pour commencer, au lieu de spécifier une action que d'autres applications peuvent choisir d'agir.
C'est pour éviter la casse dans votre application lorsque le créateur de l'application d'autres décide de renommer leur classe, ou quelque chose du genre. Aussi, il permet de multiples applications pour répondre à la même action.
Voir les intentions et des filtres d'intention pour plus de détails sur les intentions implicites.
Malheureusement, vous avez besoin pour les développeurs d'applications pour convenir à tout mettre en œuvre une action particulière pour que cela fonctionne. Si l'horloge apps ne l'avez pas, alors il n'y a pas de bonne façon d'accomplir ce que vous voulez.
Je suggère de ne pas essayer de créer une grande instruction si, comme vous, ont, depuis l'application peut être différent, non seulement avec les différentes versions du sdk, mais avec différents téléphones depuis les fabricants de téléphones peut choisir de remplacer les applications. Ainsi, votre application va être constamment briser sur les nouveaux téléphones, si vous comptez sur pour ouvrir l'application horloge.
@Mayra est droit. C'est de cette façon. Toutefois, le natif de l'horloge de l'application ne dispose pas d'un régime enregistré d'intention et n'est pas à l'aide d'un filtre d'intention. Je ne pense pas qu'il y est une application native, autres que les préférences système, qui s'ouvre à elle.
Également le natif de l'application horloge n'est pas disponible dans la même forme, ou même pas du tout, sur les différents téléphones. C'est même au-delà de la SDK de contrôle de version. Il y a donc vraiment pas de (bonne) manière de vous pour basculer sur l'un ou l'autre.
Votre meilleure manière d'en sortir est de soumettre un patch sur source.android.com que donne l'application de l'horloge d'un filtre d'intention, puis d'enregistrer l'intention de http://www.openintents.org/en/intentstable. À moins que votre application fonctionne sur un sous-ensemble de dispositifs et ne parvient pas proprement sur les autres (dire non à une telle demande peut être trouvé à la poignée de la volonté).
Petit plus pour frusso réponse. Pour le lancement de Réveil sur Google Galaxy Nexus téléphones:
dans d'autres cas, sera lancé l'application Horloge à la place de l'Horloge d'Alarme
À partir de l'api de niveau 19, vous pouvez utiliser cette option pour afficher la liste d'alarme sur la valeur par défaut de l'horloge app:
Code:
Autorisation:
Vous pouvez ajouter
à frusso réponse à soutenir les nouveaux Xperia téléphones.