2012-05-22 17 views
5

Tengo una aplicación de Android que busca todas las aplicaciones instaladas en el dispositivo y luego informa esto a un servidor (es un agente de MDM). ¿Alguna sugerencia sobre cómo obtener la categoría de la aplicación? Todos tienen una lista diferente de Categorías, pero básicamente algo como Juego, Entretenimiento, Herramientas/Utilidades, etc.¿Cómo obtener la categoría para cada aplicación en el dispositivo en Android?

Por lo que puedo ver, no hay nada relacionado con la categoría almacenada en el dispositivo. Estaba pensando en utilizar la API del mercado android para buscar la aplicación en el mercado y utilizar el valor de Categoría devuelto por la búsqueda. No estoy seguro de qué tan exitoso será encontrar una pareja. ¿Alguna sugerencia sobre la mejor manera de hacer esto?

¿Alguna sugerencia sobre un enfoque diferente?

Gracias de antemano. mike

+0

Creo que lo haría. Utilicé la API de Android (no oficial) del "mercado" y, en mi opinión, es muy amigable y confiable para desarrolladores. La mejor forma de buscar es buscar el nombre del paquete y puede obtener la categoría a cambio. No puedo pensar de otra manera, porque en la aplicación no hay definido si es un juego o una aplicación de negocios, etc. ¡Así que buena suerte con eso! – Ahmad

Respuesta

3

¿Alguna sugerencia sobre cómo obtener la Categoría de la aplicación?

Las aplicaciones no tienen categorías. Algunos mercados tienen categorías.

Por lo que puedo ver, no hay nada relacionado con la categoría almacenada en el dispositivo.

Correcto.

Estaba pensando en usar la API de Android Market para buscar la aplicación en el mercado y usar el valor de categoría devuelto por la búsqueda.

En este momento, no existe una "API de Android Market", a menos que tenga un buen equipo legal y un importante fondo de defensa legal.

Además, no todas las aplicaciones se distribuyen a través del "mercado Android", especialmente en dispositivos como Kindle Fire. Además, los desarrolladores pueden cambiar las categorías cuando lo deseen, al menos en Google Play Store.

¿Alguna sugerencia sobre la mejor manera de hacerlo?

Suelta la característica y continúa con otras formas de agregar valor.

+0

hey Dr. booster haz esto.Categorizaron todos los juegos y muestran en vista de cuadrícula. Limpiar maestro también hacer lo mismo, tienes alguna idea de cómo lo hicieron y una cosa que hice en Internet, pero hicieron lo mismo, lo que significa que hacen algo que no requiere Internet o cualquier API. –

4

si se obtiene para cada aplicación el nombre del paquete, que se puede pedir directamente a Play Store qué categoría pertenece una aplicación, análisis de respuesta de la página html con esta biblioteca:

org.jsoup.jsoup1.8.3

He aquí un fragmento de resolver su problema:

public class MainActivity extends AppCompatActivity { 

public final static String GOOGLE_URL = "https://play.google.com/store/apps/details?id="; 
public static final String ERROR = "error"; 

... 


    private class FetchCategoryTask extends AsyncTask<Void, Void, Void> { 

     private final String TAG = FetchCategoryTask.class.getSimpleName(); 
     private PackageManager pm; 
     private ActivityUtil mActivityUtil; 

     @Override 
     protected Void doInBackground(Void... errors) { 
      String category; 
      pm = getPackageManager(); 
      List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); 
      Iterator<ApplicationInfo> iterator = packages.iterator(); 
      while (iterator.hasNext()) { 
       ApplicationInfo packageInfo = iterator.next(); 
       String query_url = GOOGLE_URL + packageInfo.packageName; 
       Log.i(TAG, query_url); 
       category = getCategory(query_url); 
       // store category or do something else 
      } 
      return null; 
     } 


     private String getCategory(String query_url) { 
      boolean network = mActivityUtil.isNetworkAvailable(); 
      if (!network) { 
       //manage connectivity lost 
       return ERROR; 
      } else { 
       try { 
        Document doc = Jsoup.connect(query_url).get(); 
        Element link = doc.select("span[itemprop=genre]").first(); 
        return link.text(); 
       } catch (Exception e) { 
        return ERROR; 
       } 
      } 
     } 
    } 
} 

Puede realizar estas consultas en una AsyncTask o en un servicio. Espero que lo encuentres útil.

+0

Oye, funciona bien, pero ¿qué ocurre si google play está en otro idioma? ¿Cómo obtener solo la versión en inglés de la categoría? –

+1

intenta agregar "&& hl = en" a query_url;) –

Cuestiones relacionadas