2011-12-13 4 views
0

Mise à jour Je dois cibler Android 2.1.Filtrer la liste des applications sur la carte SD/interne

J'essaie de savoir comment lister les applications par programmation, filtrées en étant sur la carte SD ou le stockage interne.

Je ne sais pas comment aborder cela. Dois-je d'abord détecter le point de montage de la carte SD et voir si un répertoire de données de l'application est dessus? Par exemple

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { 
    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);  
    List<ResolveInfo> intents = m_pm.queryIntentActivities(mainIntent, 0); 
    File baseSD = Environment.getExternalStorageDirectory(); 

    int count = intents.size(); 
    for (int i = 0; i < count; i++) { 
    String baseApp = intents.get(i).activityInfo.applicationInfo.dataDir; 
    if (baseApp.startsWith(baseSD.getAbsolutePath()) { 
     // This is on the SD card, do whatever with the app details 
    } 
    else { 
     // This is on internal storage 
    } 
    } 
} 

Semble très bas-front, il doit y avoir une manière plus appropriée. Toute aide est appréciée.

Répondre

2

Vous pouvez utiliser ce code pour vérifier où une application est installée:

PackageInfo pi = pm.getPackageInfo("packageName", 0); 

if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == 0) 
    ; // stored on internal storage 
else 
    ; // stored on sd 

Soyez prudent, car FLAG_EXTERNAL_STORAGE est disponible à partir de l'API Android 8.

+0

Merci pour la réponse rapide et il ne fait réponse Ma question initiale, cependant je dois cibler 2.1. Jusqu'à présent, tous les exemples que je peux trouver utilisent le répertoire pour correspondre. Je vais mettre à jour ma question. – Kirk

+0

Après avoir réfléchi à ce sujet, cette partie de mon application n'a pas de sens à moins qu'ils n'utilisent 2.2 pour que cela fonctionne bien. – Kirk

+1

Pour moi, c'est la même chose, j'ai une partie de mon application qui peut être utilisée à partir d'Android 2.2. Quoi qu'il en soit remonter le moral, car 85% de la version Android est 2.2 et plus. http://developer.android.com/resources/dashboard/platform-versions.html – gwa

Questions connexes