6

का उपयोग कर रहा तरहपैकेज का नाम

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

मेरी निर्दिष्ट श्रेणी होने दो या अधिक आवेदन कर रहा हूँ और मैं से इस श्रेणी होने सभी पैकेज प्राप्त करने के लिए कर रहा हूँ आवेदन की श्रेणी प्राप्त करने के लिए कैसे:

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

अब मैं अपनी श्रेणी एप्लिकेशन स्थापना को ट्रैक करना चाहता हूं और ऐप से हटा देना चाहता हूं इसलिए मैंने एक प्रसारण रिसीवर बनाया है जो मुझे स्थापित या हटाए गए एप्लिकेशन का पैकेज नाम देगा, लेकिन मैं पैकेज नाम का उपयोग करके एप्लिकेशन की श्रेणी को कैसे गेट कर सकता हूं यह मेरा ऐप है या नहीं। क्या मैं निर्दिष्ट श्रेणी अनुप्रयोगों के लिए प्रसारण रिसीवर कर सकता हूं या नहीं, यदि मैं पैकगेनेम से श्रेणी कैसे प्राप्त कर सकता हूं।

+0

क्या आपको इसके लिए समाधान मिला? –

+0

हम प्रोग्रामिक रूप से किसी ऐप की श्रेणी कैसे प्राप्त कर सकते हैं? –

+0

@ सैम-इन-टेक वैलेंस आप पैकेज नाम का उपयोग करके श्रेणी नहीं प्राप्त कर सकते हैं केवल आप जो कुछ कर सकते हैं वह श्रेणी का उपयोग कर पैकेज नाम निकालना है। तो मैंने प्रसारण में क्या किया, मैंने पैकेज को स्थापित किया और सरणी सूची में परिभाषित श्रेणी का उपयोग करके सभी पैकेजों को भी लिया और नवीनतम पैकेज के साथ मैचों को स्थापित किया, यदि मैचों का मतलब है कि अब इंस्टॉल किया गया एप्लिकेशन मेरा अपना एप्लीकेशन है। – pyus13

उत्तर

-1

आप एक और दृष्टिकोण का उपयोग कर सकते हैं। अपनी गतिविधियों में श्रेणी सेट करने के बजाय अपने अनुप्रयोगों में मेटा जानकारी सेट करें। ध्यान दें कि पैकेज की जानकारी नष्ट कर दिया अब प्राप्त नहीं किया जा सकता है (अगर अनुप्रयोगों झंडा 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> 

पैकेज इंस्टॉलेशन के ट्रैक करने के लिए एक प्रसारण रिसीवर जोड़ें। अपने मूल्यों को पहले से देखने के लिए पैकेज की मेटा जानकारी जांचें।

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

जैसा कि आप देख किसी अन्य अनुप्रयोगों उनके मेनिफेस्ट में अपने मेटा डेटा सेट कर सकते हैं कि तो यह अपने खुद के एप्लिकेशन पहचान करने के लिए एक सुरक्षित तरीका नहीं है। सबसे अच्छा तरीका एपीके हस्ताक्षर की जांच करना है यदि सभी एक ही प्रमाणपत्र के साथ हस्ताक्षरित हैं।

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

धन्यवाद। मैं कोशिश करूँगा और आपको बता दूंगा कि यह मेरे लिए ठीक काम करता है या नहीं। – pyus13

+0

मूल्य के साथ-साथ हस्ताक्षर चर में कोई जानकारी नहीं है –