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


 
Herramientas
  #1  
Viejo 17/08/14, 20:05:01
Avatar de rafaxplayer
rafaxplayer rafaxplayer no está en línea
Miembro del foro
Mensajes: 224
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
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?
Responder Con Cita


  #2  
Viejo 17/08/14, 22:38:49
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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.
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 18/08/14, 00:35:04
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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.
Responder Con Cita
  #4  
Viejo 18/08/14, 08:40:14
Avatar de rafaxplayer
rafaxplayer rafaxplayer no está en línea
Miembro del foro
Mensajes: 224
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Responder Con Cita
  #5  
Viejo 18/08/14, 09:30:38
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
//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.
Responder Con Cita
Los siguientes 2 usuarios han agradecido a kriogeN su comentario:
  #6  
Viejo 18/08/14, 14:09:45
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Vale, eso explica que nunca haya visto esos iconos... lo primero que hago al comprar cualquier Samsung es quitar el TouchWiz
Responder Con Cita
Gracias de parte de:
  #7  
Viejo 18/08/14, 21:33:35
Avatar de rafaxplayer
rafaxplayer rafaxplayer no está en línea
Miembro del foro
Mensajes: 224
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Responder Con Cita
  #8  
Viejo 18/08/14, 22:40:46
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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".
Responder Con Cita
Gracias de parte de:
  #9  
Viejo 19/08/14, 07:46:35
Avatar de rafaxplayer
rafaxplayer rafaxplayer no está en línea
Miembro del foro
Mensajes: 224
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por kriogeN Ver Mensaje
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".
ok kriogen todo claro , ahora me surgen alguna duda mas..

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();
			}
		}
	};
Con esto no me funciona aunque el broadcast recibe todos los parámetros bien y los reflejo en otros view sin problemas.

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 ;)
Responder Con Cita
  #10  
Viejo 19/08/14, 08:09:57
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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.
Responder Con Cita
  #11  
Viejo 19/08/14, 09:58:47
Avatar de rafaxplayer
rafaxplayer rafaxplayer no está en línea
Miembro del foro
Mensajes: 224
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
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;
	}
espero le sirva a alguien mas ;)
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 21:09:53 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007