6

Tôi gặp hai hoặc ứng dụng hơn có thể loại nào đó của tôi nhưLàm thế nào để có được loại của ứng dụng sử dụng tên gói

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

và tôi có thể nhận được tất cả các gói có thể loại này bằng cách:

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

Bây giờ tôi muốn theo dõi cài đặt ứng dụng danh mục của mình và xóa khỏi ứng dụng vì vậy tôi đã tạo một bộ thu phát sóng sẽ cung cấp cho tôi tên gói của ứng dụng đã cài đặt hoặc đã xóa nhưng làm cách nào tôi có thể chuyển danh mục ứng dụng bằng tên gói đây là ứng dụng của tôi hay không. Tôi có thể làm cho bộ thu phát sóng cho các ứng dụng thể loại được chỉ định hay không, làm cách nào tôi có thể lấy danh mục từ packagename.

+0

bạn có giải pháp cho việc này không? –

+0

Làm cách nào để chúng tôi có thể lập danh mục của bất kỳ ứng dụng nào? –

+0

@ Sam-In-TechValens bạn không thể lấy danh mục bằng cách chỉ sử dụng tên gói mà bạn có thể làm là trích xuất tên gói sử dụng danh mục. Vì vậy, những gì tôi đã thực hiện trong phát sóng, tôi đã cài đặt gói và cũng lấy tất cả các gói bằng cách sử dụng danh mục đã định nghĩa trong danh sách và khớp với gói mới nhất được cài đặt nếu nó khớp với nghĩa là ứng dụng được cài đặt bây giờ là ứng dụng của riêng tôi. – pyus13

Trả lời

-1

Bạn có thể sử dụng cách tiếp cận khác. Đặt thông tin meta trong tệp kê khai ứng dụng của bạn thay vì đặt danh mục cho hoạt động của bạn. Lưu ý rằng xóa thông tin gói không thể được lấy ra nữa (nếu ứng dụng chưa được xóa với cờ DONT_DELETE_DATA)

<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> 

Thêm một máy thu phát sóng để theo dõi cài đặt gói. Kiểm tra thông tin meta của gói để xem các giá trị của bạn đã có ở đó chưa.

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   
} 
} 

Như bạn thấy, bất kỳ ứng dụng nào khác cũng có thể đặt siêu dữ liệu trong tệp kê khai để không nhận dạng ứng dụng của bạn một cách an toàn. Cách tốt nhất là kiểm tra chữ ký apk nếu tất cả được ký với cùng một chứng chỉ.

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

Cảm ơn. Tôi sẽ thử điều này và sẽ cho bạn biết nếu nó hoạt động tốt cho tôi. – pyus13

+0

Không có thông tin về giá trị cũng như trong biến chữ ký –

Các vấn đề liên quan