![]() |
|
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
|
Herramientas |
|
#1
|
|
Icono con contador
Saludos gente , alguien sabe como se puede implementar en mi app un contador de notificaciones como en IOS, hay aplicaciones que lo usan en android como la de facebook o gmail, e aqui un ejemplo:
![]() Bueno me gustaría hacer esto con el icono de mi app , alguna sugerencia? |
|
|
|
#2
|
||||
|
||||
|
Tendrás que hacer un widget de escritorio con un imageview y un textview, el icono como tal no puede cambiarse.
Para el layout del widget puedes usar este http://stackoverflow.com/questions/2...droid/23054306 Aun así, puestos a hacer un widget, mejor que no parezca un simple acceso directo y dé más información o sea más personalizable. |
| Gracias de parte de: | ||
|
#3
|
||||
|
||||
|
Si se puede, pero sólo funciona con móviles Samsung con TouchWiz, y teóricamente también con Sony con su Launcher, pero esto último no lo he podido probar. En mi app lo tengo hecho con las Push pendientes, y funciona perfecto con mi S4.
En el caso de Samsung funciona tanto en los escritorios como en el lanzador de aplicaciones. |
|
#4
|
|
Aja lo de los widgets ya lo sabia , ahora entiendo porque solo por ejemplo la aplicacion de email se ve el badge en mi tablet samsung sin enbargo en el movil LG no, lo mismo pasa con la de facebook y demas...
Bueno sobre este tema donde puedo encontrar información , me gustara implementarlo. Y en el caso de los widgets como seria para que la instalación instale el widget en el "escritorio" y no el icon launcher? Última edición por rafaxplayer Día 18/08/14 a las 08:54:15 |
|
#5
|
||||
|
||||
|
//Globo Samsung
intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE") ; intent.putExtra("badge_count", numero); intent.putExtra("badge_count_package_name", arg0.getPackageName()); intent.putExtra("badge_count_class_name", "com.posinglife.app.InicioActivity"); arg0.sendBroadcast(intent); //Globo Sony Ericsson intent = new Intent(); intent.setAction("com.sonyericsson.home.action.UPD ATE_BADGE"); intent.putExtra("com.sonyericsson.home.intent.extr a.badge.ACTIVITY_NAME", "com.posinglife.app.InicioActivity"); intent.putExtra("com.sonyericsson.home.intent.extr a.badge.SHOW_MESSAGE", true); intent.putExtra("com.sonyericsson.home.intent.extr a.badge.MESSAGE", numero); intent.putExtra("com.sonyericsson.home.intent.extr a.badge.PACKAGE_NAME", arg0.getPackageName()); arg0.sendBroadcast(intent); Ese es el código que tengo en mi app, creo que los nombres que van en los extra son bastante autoexplicativos. En el caso de Samsung con poner número a 0 ya no sale nada, todo lo que sea mayor que 0 si sale. En el caso de Sony hay que poner SHOW_MESSAGE a false, creo que aún poniendo 0 si saldría el 0 si SHOW_MESSAGE es true. Aunque como he dicho antes no lo he podido probar. Si tienes 2 Activities que pueden ser Launcher de la aplicación y quieres que el globo aparezca en ambos tendrás que repetir el código con badge_count_class_name y ACTIVITY_NAME, para Samsung y Sony respectivamente, por cada Activity. Puedes tener incluso números distintos en cada una de ellas. El globo no se irá hasta que lo quites (poniendo 0 en Samsung o false en Sony), incluso aunque desinstales la app y la vuelvas a instalar mantendrá el mismo número que tenía antes. Si observas el código Samsung apuesta por una "estandarización" del sistema, usando una acción de android.intent.action, pero que realmente sólo existe en los móviles Samsung y sólo se muestra si tienes TouchWiz. Pero ya ha dicho Google en varias ocasiones que el sistema IOS no le mola, que para eso están las notificaciones en la barra, aunque ahora que eso Apple se lo ha copiado a Google quizás opten también algún día por copiarlo ellos. |
| Los siguientes 2 usuarios han agradecido a kriogeN su comentario: | ||
|
#6
|
||||
|
||||
|
Vale, eso explica que nunca haya visto esos iconos... lo primero que hago al comprar cualquier Samsung es quitar el TouchWiz
|
| Gracias de parte de: | ||
|
#7
|
|
aja ya veo , en principio lo haré solo para samsung...
Referente al código samsung arg0 a que se refiere? También he encontrado este codigo por hay ,aunque no tiene nada que ver con lo que me muestras , esta bien comentarlo. http://stackoverflow.com/questions/2...a-count-to-the |
|
#8
|
||||
|
||||
|
arg0 es un Context, puede ser la propia Activity desde la que lo estás ejecutando.
Aparece arg0 porque es el nombre del parámetro del Context en mi GCMBroadcastReceiver, ya que el número lo establezco al recibir una notificación Push nueva. Comparándola con las que tenía previamente no leídas y sumándole 1. Eso es la variable "numero". |
| Gracias de parte de: | ||
|
#9
|
|
|
Cita:
Yo tambien uso gcm y broadcast para actualizar esto , mi codigo al final a quedado asi: Código:
private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bun = intent.getExtras();
String newpost = bun.getString("newpost");
String newmps = bun.getString("newMps");
int nmsg = bun.getInt("mensage");
Editor edit = Settings.edit();
if (newpost != null)
edit.putInt("newpost", Integer.parseInt(newpost));
if (newmps != null)
edit.putInt("newmps", Integer.parseInt(newmps));
edit.commit();
Intent inte = new Intent("android.intent.action.BADGE_COUNT_UPDATE") ;
inte.putExtra("badge_count", Integer.parseInt(newmps));
inte.putExtra("badge_count_package_name", context.getPackageName());
inte.putExtra("badge_count_class_name", "com.amsspecialist.MainActivity");
context.sendBroadcast(intent);
tx.setText(newpost);
tm.setText(newmps);
if (nmsg != 0) {
Toast.makeText(context, CommonUtilities._mensages[nmsg],
Toast.LENGTH_LONG).show();
}
}
};
Una de las dudas que me surgen es con el extra "badge_count_class_name" hay que apuntar a la activity launcher dijiste, pero en mi app la primera activity es una intro (Intro.java) la cual solo verifica un login al principio y poco mas , el broadcast se encuentra en MainActivity donde se realizan todas las tareas , que debo usar en este extra? Y como ultimo para sony , utilizas el código a pelo sin hacer filtros de que dispositivo corre la app ni nada? esto no ocasiona errores? Gracias por tu paciencia ;) |
|
#10
|
||||
|
||||
|
Tiene que ser la Activity que está en el Launcher, es decir, la que defines en el Manifest como Launcher. Ya que es a la que tiene que ponerle el icono. Si la primera Activity que lanzas es la Intro, pues se lo tienes que poner a la Intro.
En cuanto a lo de hacer comprobaciones, no, porque si el ActionFilter no existe el móvil simplemente no hace nada, el mensaje se envía pero ninguna aplicación lo recibe. |
|
#11
|
|
ok gracias , ya purula perfect...
Posteo el codigo que he usado al final Son dos metodos: Código:
public static void setBadge(Context context, int count) {
// samsung intent
Boolean val=count < 1 ? false : true;
String launcherClassName = getLauncherClassName(context);
if (launcherClassName == null) {
return;
}
Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
intent.putExtra("badge_count", count);
intent.putExtra("badge_count_package_name", context.getPackageName());
intent.putExtra("badge_count_class_name", launcherClassName);
Log.d("launcherClassName", launcherClassName);
context.sendBroadcast(intent);
// sony intent
Intent intentSony = new Intent();
intentSony.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
intentSony.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", launcherClassName);
intentSony.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", val);
intentSony.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE",String.valueOf(count));
intentSony.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", "com.amsspecialist");
context.sendBroadcast(intentSony);
}
public static String getLauncherClassName(Context context) {
PackageManager pm = context.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0);
for (ResolveInfo resolveInfo : resolveInfos) {
String pkgName = resolveInfo.activityInfo.applicationInfo.packageName;
if (pkgName.equalsIgnoreCase(context.getPackageName())) {
String className = resolveInfo.activityInfo.name;
return className;
}
}
return null;
}
|
| Respuesta |
Estás aquí
|
||||||
|
||||||
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 17:23:32 (GMT +1)
HTCMania: líderes desde el 2007







