2011-05-18 12 views
10

मैं सिस्टम ऐप और सामान्य ऐप के बीच अंतर कैसे करूं? मैंने एंड्रॉइड PackageManager के माध्यम से देखा और कोई भी नहीं मिला।मैं गतिशील रूप से कैसे पता लगा सकता हूं कि मेरा एप्लिकेशन सिस्टम या सामान्य है या नहीं?

संपादित करें: मैं कोड के माध्यम से अंतर करना चाहता हूं।

if(system app) { 
    //do something 
} 
else{ 
    //do nothing 
} 

उत्तर

15

आप एप्लिकेशनइन्फो क्लास (android.conent.pm) में उपलब्ध झंडे का उपयोग करने का प्रयास कर सकते हैं। उदाहरण के लिए:

... 
PackageManager pm = getPackageManager(); 
List<ApplicationInfo> installedApps = pm.getInstalledApplications(0); 

for (ApplicationInfo ai: installedApps) { 

    if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { 
     // System app - do something here 
     ... 
    } else { 
     // User installed app? 
    } 
} 
+1

यह वास्तव में सच नहीं है। हालांकि अधिकांश स्थापित अनुप्रयोग उस व्यवहार का पालन करते हैं जो 'Application.FLAG_SYSTEM' प्राप्त होगा, कुछ ऐप्स सिस्टम छवि (जैसे कि एसडी कार्ड पर) पर स्थापित नहीं होने का विकल्प चुन सकते हैं, और यह लागू नहीं होगा। Http://developer.android.com/reference/android/content/pm/ApplicationInfo.html#FLAG_SYSTEM – Phil

+0

@ क्लेयरस्विन्सन: फिल सही है। एक सत्यापित करने के लिए एक डबल पुष्टिकरण विधि के लिए मेरा उत्तर जांचें कि कोई ऐप 'वास्तविक' है या नहीं सिस्टम ऐप या नहीं। – Basher51

0

शुरुआत के लिए, आप नहीं कर सकते एक प्रणाली एप्लिकेशन को अनइंस्टॉल लेकिन आप "> सेटिंग> एप्लिकेशन एप्लिकेशन प्रबंधित करें" का उपयोग कर एक सामान्य एप्लिकेशन को अनइंस्टॉल कर सकते हैं।

+0

हां, लेकिन मेनू में जाने से 'पैकेजमैनेजर' का उपयोग करने का कोई संबंध नहीं है – slinden77

11

पैकेज प्रबंधक भूल जाओ! आपने केवल अपने आवेदन के बारे में पूछा। भीतर आपकी गतिविधि # OnCreate (बंडल) तुम सिर्फ getApplicationInfo() कहते हैं और इस तरह से अपने झंडे का परीक्षण कर सकते हैं:

boolean isSystemApp = (getApplicationInfo().flags 
    & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0; 
+2

स्वीकार्य उत्तर – ottel142

+0

से यह बहुत बेहतर है यह आवश्यक नहीं है, जो समाधान @ बेसर51 का उल्लेख किया गया है वह सही उत्तर होना चाहिए। कारण सिस्टम सिस्टम अभी भी सिस्टम छवि के बाहर स्थापित किया जा सकता है। ये झंडे केवल डिवाइस की सिस्टम छवि में स्थापित ऐप्स के लिए काम करते हैं –

0

एक साधारण समारोह:

:

public boolean isUserApp(ApplicationInfo ai,boolean getUpdatedSystemApps){  
    if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { 
     if(getUpdatedSystemApps==true){ 
      if((ai.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0){ 
       return true; 
      } else { 
       return false; 
      }     
     } 
     return false; 
    } else { 
     return true; 
    } 
} 

आप की तरह समारोह ऊपर का उपयोग कर सकते

PackageManager pm = getPackageManager(); 
List<ApplicationInfo> allApps = pm.getInstalledApplications(0); 

for (ApplicationInfo ai: allApps) { 

    if (isUserApp(ai,true)) { 
     // User app or Updated SystemApp - do something here 
     ... 
    } else { 
     // System app 
    } 
} 
संबंधित मुद्दे

 संबंधित मुद्दे