Frage

  

Mögliche Duplizieren:
   Intent die Uhr-Anwendung starten auf Android

Ich habe ein Widget, das zeigt die Zeit und wenn man Hähne auf sie, es startet die com.android.alarmclock / .AlarmClock Aktivität mit einem PendingIntent. Dies funktioniert gut vor-Froyo, aber mit Froyo, ich habe die com.android.deskclock starten / .AlarmClock. Also habe ich in Code setzen möchten, dass die Kontrollen für die Klasse Existenz und starten Sie die entsprechende Aktivität / Absicht. Hier ist, was ich versucht, aber es funktioniert nicht.

Intent alarmIntent = new Intent();
try {
    if (Class.forName("com.android.deskclock.AlarmClock") != null) {
    Log.i(TAG, "setting deskclock alarm -- must be Froyo!");
    alarmIntent.setClassName("com.android.deskclock",
        "com.android.deskclock.AlarmClock");
    }
} catch (ClassNotFoundException e) {
    Log.i(TAG, "setting alarmclock alarm -- must be Eclair!");
    alarmIntent.setClassName("com.android.alarmclock",
        "com.android.alarmclock.AlarmClock");
}
PendingIntent pendingIntent = PendingIntent.getActivity(context, REQUEST_UPDATE_TIME_NOW,
    alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.text_timeofday, pendingIntent);

Es denkt immer es ist „Eclair“ und versagt daher auf Froyo. Ist dies der beste Ansatz, oder soll ich die Anwendungsebene überprüfen? Ich ziehe es vor der Arbeit mit der Klasse Existenz.

War es hilfreich?

Lösung

  

if (Class.forName ( "com.android.deskclock.AlarmClock")! = Null)

Das wird nicht funktionieren, weil diese Klasse nicht in Ihrem Projekt. Allenfalls es in einem anderen Projekt auf dem Gerät sein könnte.

Es gibt keine dokumentierten unterstützt Intent für den Start einen Wecker im Android SDK. Ihr Ansatz der Festverdrahtung in Paket- und Klassennamen ist zerbrechlich, wie Sie zu entdecken. Es wird nicht auf einigen Geräten arbeiten, wenn sie nicht, dass die Anwendung haben (beispielsweise ersetzt durch eine vom Gerätehersteller). Plus, wie Sie gesehen haben, kann es in zukünftigen Versionen von Android ändern. Ich habe eine grobe genug Zeit versucht, die Gerätehersteller davon zu überzeugen, nicht das SDK zu brechen; Entwickler von Drittanbietern, die tun es schwächt meine Fall .

Das wird gesagt, die allgemeine Art und Weise zu sehen, wenn etwas zu einem Intent reagieren ist PackageManager zu verwenden (beispielsweise queryIntentActivities()).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top