reloj poner pantalla online google descargar chrome bloqueo analogico android android-intent widget clock

poner - Intención de lanzar la aplicación de reloj en android.



reloj google online (8)

Estoy enfrentando un problema con un widget de reloj que hice. Quiero que el usuario toque el reloj e inicie la aplicación de reloj en el teléfono. este es el codigo

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

Hice lo anterior para que cuando toque el reloj se abran los ajustes de la alarma. Pero no es universal. Descubrí que en droids con 2.2 no funciona. Debe haber una solución mejor que crear una declaración if para cada teléfono con Android en todo el mundo. Además, no sé los nombres de los paquetes para todos. Alguien sabe cómo superar esto, por favor ayuda.


@Mayra tiene razón. Ese es el camino. Sin embargo, la aplicación de reloj nativo no tiene un intento registrado y no está utilizando un filtro de intento. No creo que haya una aplicación nativa, aparte de las preferencias del sistema, que la abra.

Además, la aplicación de reloj nativa no está disponible de la misma forma, o ni siquiera está disponible, en diferentes teléfonos. Esto es incluso más allá de la versión SDK. Así que realmente no hay una (buena) manera de encenderlo tampoco.

Su mejor salida es enviar un parche en source.android.com que le dé a la aplicación del reloj un filtro de intención y luego registrar la intención en http://www.openintents.org/en/intentstable . Al menos, entonces su aplicación funciona en un subconjunto de dispositivos y falla limpiamente en otros (diciendo que no se puede encontrar dicha aplicación para manejar la intención).


Código:

Intent i = new Intent(AlarmClock.ACTION_SET_ALARM); i.putExtra(AlarmClock.EXTRA_MESSAGE, "Alarm Title"); ArrayList<Integer> alarmDays = new ArrayList<>(); alarmDays.add(Calendar.SATURDAY); alarmDays.add(Calendar.SUNDAY); alarmDays.add(Calendar.MONDAY); alarmDays.add(Calendar.TUESDAY); alarmDays.add(Calendar.WEDNESDAY); alarmDays.add(Calendar.THURSDAY); alarmDays.add(Calendar.FRIDAY); i.putExtra(AlarmClock.EXTRA_DAYS, alarmDays); i.putExtra(AlarmClock.EXTRA_VIBRATE, true); i.putExtra(AlarmClock.EXTRA_HOUR, 10); i.putExtra(AlarmClock.EXTRA_MINUTES, 21); startActivity(i);

Permiso:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />


Desde el nivel 19 de api, puede usar esto para mostrar la lista de alarmas en la aplicación de reloj predeterminada:

Intent mClockIntent = new Intent(AlarmClock.ACTION_SHOW_ALARMS); mClockIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(mClockIntent);


Este código funciona para mi widget de reloj.

PackageManager packageManager = context.getPackageManager(); Intent alarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER); // Verify clock implementation String clockImpls[][] = { {"HTC Alarm Clock", "com.htc.android.worldclock", "com.htc.android.worldclock.WorldClockTabControl" }, {"Standar Alarm Clock", "com.android.deskclock", "com.android.deskclock.AlarmClock"}, {"Froyo Nexus Alarm Clock", "com.google.android.deskclock", "com.android.deskclock.DeskClock"}, {"Moto Blur Alarm Clock", "com.motorola.blur.alarmclock", "com.motorola.blur.alarmclock.AlarmClock"}, {"Samsung Galaxy Clock", "com.sec.android.app.clockpackage","com.sec.android.app.clockpackage.ClockPackage"} , {"Sony Ericsson Xperia Z", "com.sonyericsson.organizer", "com.sonyericsson.organizer.Organizer_WorldClock" }, {"ASUS Tablets", "com.asus.deskclock", "com.asus.deskclock.DeskClock"} }; boolean foundClockImpl = false; for(int i=0; i<clockImpls.length; i++) { String vendor = clockImpls[i][0]; String packageName = clockImpls[i][1]; String className = clockImpls[i][2]; try { ComponentName cn = new ComponentName(packageName, className); ActivityInfo aInfo = packageManager.getActivityInfo(cn, PackageManager.GET_META_DATA); alarmClockIntent.setComponent(cn); debug("Found " + vendor + " --> " + packageName + "/" + className); foundClockImpl = true; } catch (NameNotFoundException e) { debug(vendor + " does not exists"); } } if (foundClockImpl) { PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, alarmClockIntent, 0); // add pending intent to your component // .... }

De esta manera, puedo ejecutar un administrador de reloj predeterminado.


La forma correcta de comenzar una actividad fuera de su aplicación es usar un intento implícito. Con una intención implícita, no proporciona una clase específica para comenzar, sino que especifica una acción que otras aplicaciones pueden elegir para actuar.

Esto es para evitar roturas en su aplicación cuando el creador de la otra aplicación decide cambiar el nombre de su clase, o algo así. Además, permite que múltiples aplicaciones respondan a la misma acción.

Ver intenciones y filtros de intenciones para más detalles sobre intenciones implícitas.

Desafortunadamente, necesita que los desarrolladores de aplicaciones acepten que todos implementen una acción en particular para que esto funcione. Si las aplicaciones de reloj no tienen esto, entonces no hay una buena manera de lograr lo que quieres.

Yo sugeriría que no intente crear una gran declaración if como la tiene usted, ya que la aplicación podría ser diferente, no solo con diferentes versiones de SDK, sino con diferentes teléfonos, ya que los fabricantes de teléfonos pueden elegir reemplazar las aplicaciones. Por lo tanto, su aplicación estará constantemente en nuevos teléfonos, si confía en poder abrir la aplicación de reloj.


Para seguir la respuesta de Mayra, la clase android.provider.AlarmClock tiene la Intent adecuada para esto, pero está disponible solo en el nivel de API 9 y superior . (¡Al menos alguien en Google escucha solicitudes como esta!)

Para iniciar la aplicación de reloj desde su widget, funciona el siguiente código:

Intent openClockIntent = new Intent(AlarmClock.ACTION_SET_ALARM); openClockIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(openClockIntent);

También necesitas este permiso:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>


Pequeña adición para respuesta frusso . Para lanzar Alarm Clock en los teléfonos Google Galaxy Nexus:

{"Standar Alarm Clock2", "com.google.android.deskclock", "com.android.deskclock.AlarmClock"},

En otros casos se lanzará la aplicación Reloj en lugar del Reloj Alarma.


Puedes añadir

{ "Sony Ericsson Xperia Z", "com.sonyericsson.organizer", "com.sonyericsson.organizer.Organizer_WorldClock" }

para frusso responder para soportar nuevos teléfonos Xperia.