6

Ich bin mit zwei oder mehr Anwendungen wie meine angegebenen Kategorie mitWie Kategorie von Anwendung erhalten Paketnamen

<category android:name="com.myapp.MY_CATEGORY"/> 

und ich bin in der Lage, alle Pakete bekommen diese Kategorie mit von:

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
mainIntent.addCategory("com.myapp.MY_CATEGORY"); 
final List<ResolveInfo> pkgAppsList =getPackageManager().queryIntentActivities(mainIntent, 0); 

Jetzt möchte ich meine Kategorie Anwendung Installation zu verfolgen und von einer App zu löschen, so habe ich einen Broadcast-Empfänger, der mir den Paketnamen der installierten oder gelöschten Anwendung, aber wie kann ich die Kategorie der Anwendung mit dem Paketnamen, ob zu identifizieren Das ist meine App oder nicht. kann ich den broadcast receiver für bestimmte kategorie-applikationen erstellen oder wenn nicht, wie bekomme ich die kategorie von packagename.

+0

Haben Sie die Lösung dafür? –

+0

Wie können wir programmatisch die Kategorie einer App bekommen? –

+0

@ Sam-In-TechValens Sie können die Kategorie nicht mit dem Paketnamen abrufen. Sie können nur den Paketnamen mithilfe der Kategorie extrahieren. Also, was ich in Broadcast getan habe nahm ich das Paket installiert und nahm auch alle Pakete mit der definierten Kategorie in Arraylist und passt mit dem neuesten Paket installiert, wenn es übereinstimmt bedeutet, dass die Anwendung installiert ist jetzt meine eigene Anwendung. – pyus13

Antwort

-1

Sie können einen anderen Ansatz verwenden. Legen Sie in Ihrem Anwendungsmanifest eine Metainformation fest, anstatt die Kategorie für Ihre Aktivitäten festzulegen. Beachten Sie, dass Paketinformationen gelöscht kann nicht mehr abgerufen werden

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="your.package.name" 
    android:versionCode="1" 
    android:versionName="1" > 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name"> 
     <meta-data 
      android:name="meta-name" 
      android:value="meta-value" /> 
    </application> 
</manifest> 

einen Rundfunkempfänger hinzufügen zu verfolgen Paketinstallationen (wenn Anwendungen nicht mit Flag DONT_DELETE_DATA gelöscht wurde). Überprüfen Sie die Meta-Informationen des Pakets, um zu sehen, ob Ihre Werte bereits vorhanden sind.

private BroadcastReceiver packageListener = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 

     Log.i(intent.getAction(), intent.getData().getEncodedSchemeSpecificPart()); 

     //Currently being installed or deleted package 
     String packageName = intent.getData().getEncodedSchemeSpecificPart(); 

     Object value = null;    
     try { 
      ApplicationInfo appInfo = getPackageManager().getApplicationInfo(packageName,PackageManager.GET_META_DATA); 

      //Get meta value if exits 
      value = appInfo.metaData.get("meta-name"); 
     } catch (NameNotFoundException e) { 
      Log.e(TAG, "exception occured", e);    
     } 
     //check meta info if it is yours   
} 
} 

Wie Sie sehen, dass alle anderen Anwendungen, die Meta-Daten in ihrem Manifest festlegen können, so dass es keine sichere Möglichkeit, Ihre eigenen Anwendungen zu erkennen. Der beste Weg besteht darin, apk-Signaturen zu überprüfen, wenn alle mit demselben Zertifikat signiert sind.

private BroadcastReceiver packageListener = new BroadcastReceiver() { 

    public void onReceive(Context context, Intent intent) { 

     Log.i(intent.getAction(), intent.getData().getEncodedSchemeSpecificPart()); 

     String packageName = intent.getData().getEncodedSchemeSpecificPart(); 

     Signature[] signatures = null; 
     try { 
      PackageInfo packageInfo = getPackageManager().getPackageInfo(packageName,PackageManager.GET_SIGNATURES); 

      signatures = packageInfo.signatures; 

     } catch (NameNotFoundException e) { 
      Log.e(TAG, "exception occured", e); 
     } 

     //check installed package signature if it matches 
    } 
} 
+0

Danke. Ich werde es versuchen und Sie wissen lassen, ob es mir gut geht. – pyus13

+0

Es gibt keine Informationen in Wert sowie in Signaturvariable –

Verwandte Themen