2014-04-16 28 views
5

चुनें मैं एक संवाद पॉप अप करना चाहता हूं जो उपयोगकर्ता को लॉन्च करने के लिए लॉन्चर चुनने देता है, डिफ़ॉल्ट विकल्प के रूप में सेट किया गया है। मैंनेएंड्रॉइड: डिफ़ॉल्ट लॉन्चर प्रोग्रामेटिक रूप से

 Intent home = new Intent(Intent.ACTION_DEFAULT); 
    home.addCategory(Intent.CATEGORY_LAUNCHER); 
    Intent chooser = Intent.createChooser(home, "Launcher"); 
    context.startActivity(chooser); 

लेकिन इसके द्वारा पॉप किए गए संवाद में डिफ़ॉल्ट सेट करने का विकल्प नहीं है। हालांकि यदि कोई डिफ़ॉल्ट लॉन्चर पहले से सेट है तो निम्न कोड संवाद को पॉप नहीं करेगा।

 Intent startMain = new Intent(Intent.ACTION_MAIN); 
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(startMain); 

यह कैसे किया जा सकता है? मदद के लिए अग्रिम में धन्यवाद।

उत्तर

10

निम्नलिखित उपयोग करके देखें:

Intent startMain = new Intent(Intent.ACTION_MAIN); 
startMain.addCategory(Intent.CATEGORY_HOME); 
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(startMain); 

एक डिफ़ॉल्ट कार्रवाई पहले से ही सेट है (तुम्हारा), तो आपको पहले कॉल कर सकते हैं:

getPackageManager().clearPackagePreferredActivities(getPackageName()); 

डिफ़ॉल्ट कार्रवाई आपका नहीं है, तो आप इसे प्रोग्रामेटिक रूप से साफ़ नहीं कर सकता है, आप यह जांच सकते हैं कि अन्य ऐप डिफ़ॉल्ट रूप से सेट किया गया है या कोई संदेश दिखाया गया है ..

private boolean isMyLauncherDefault() { 
    PackageManager localPackageManager = getPackageManager(); 
    Intent intent = new Intent("android.intent.action.MAIN"); 
    intent.addCategory("android.intent.category.HOME"); 
    String str = localPackageManager.resolveActivity(intent, 
      PackageManager.MATCH_DEFAULT_ONLY).activityInfo.packageName; 
    return str.equals(getPackageName()); 
} 

अन्य एप्लिकेशन के मामले में एक समाधान के रूप में डिफ़ॉल्ट के रूप में सेट किया गया है, तो आप एक fake घर, इसे स्थापित और फिर उसे अनइंस्टॉल (इस वसीयत सिस्टम डिफ़ॉल्ट एप्लिकेशन स्पष्ट करने के forse) ... बनाए जा सकते हैं

प्रकट .xml

<activity 
     android:name="FakeHome" android:enabled="false"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.HOME"/> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

FakeHome.java

public class FakeHome extends Activity { 

} 

कहीं

if(!isMyLauncherDefault()) {    
PackageManager p = getPackageManager(); 
ComponentName cN = new ComponentName(Activity.this, FakeHome.class); 
p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 

Intent selector = new Intent(Intent.ACTION_MAIN); 
selector.addCategory(Intent.CATEGORY_HOME);    
startActivity(selector); 

p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);    
    } 
+2

यह कोड डिफ़ॉल्ट लॉन्चर पहले से सेट होने पर संवाद पॉप अप नहीं करेगा। –

+0

क्या आपने कभी इसे काम करने के लिए प्राप्त किया था? – portfoliobuilder

+0

'getPreferredActivities()' का 'फ़िल्टर' पैरामीटर आउटपुट पैरामीटर है। कॉल से पहले कोई फ़िल्टर आइटम जोड़ना इससे पहले कोई प्रभाव नहीं पड़ता है। –

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