2010-05-05 17 views
50

मैं एक ऐप लिख रहा हूं जिसके लिए आपको इसे इस्तेमाल करने से पहले किसी सेवा में लॉग इन होना आवश्यक है। एंड्रॉइड की मेरी समझ से अब तक, आपको यह चुनना होगा कि जब आप मैनेजर में लॉन्चर से खुलते हैं तो कौन सी गतिविधि लॉन्च की जाती है। मुझे नहीं पता कि मैं किस गतिविधि को संकलित समय पर लॉन्च करना चाहता हूं। मैं चाहता हूं कि उपयोगकर्ता आइकन पर क्लिक करें, फिर मैं जांचता हूं और देखता हूं कि वे लॉग इन हैं या नहीं, फिर उस पर आधारित निर्णय लें कि लॉगिन गतिविधि लॉन्च करना है या मुख्य ऐप गतिविधि है या नहीं। क्या इसे करने का कोई तरीका है?ऐप खोलने के दौरान मैं किस गतिविधि को लॉन्च करना चुन सकता हूं

उत्तर

60

नहीं, चूंकि आपको कुछ कोड चलाने होंगे, इसलिए यह कहने के लिए घोषणात्मक रूप से (प्रकट में) कोई रास्ता नहीं है।

final Class<? extends Activity> activityClass; 
if(userIsLoggedOn()) 
    activityClass = LoggedOnActivity.class; 
else 
    activityClass = LogInActivity.class; 

Intent newActivity = new Intent(context, activityClass); 
context.startActivity(newActivity); 
+52

ध्यान देने योग्य एक बात यह है कि यूआई प्रदर्शित किए बिना एक गतिविधि लॉन्च करना संभव है, ताकि आप इसे ऐसा करने के लिए प्राप्त कर सकें जो आप चाहते हैं ... ध्यान दें कि आपका तर्क काफी जल्दी किया जाना चाहिए ताकि यह हो उपयोगकर्ता के लिए उल्लेखनीय नहीं है। बस अपनी गतिविधि के मैनिफेस्ट के अंदर निम्न कोड डालें: एंड्रॉइड: थीम = "@ एंड्रॉइड: स्टाइल/थीम .न डिस्प्ले" – Justin

+0

क्या आप यह पता लगा सकते हैं कि आप किसी अन्य समय लॉन्च बनाम मुख्य पर जा रहे हैं? चूंकि कोई लॉन्च होने पर आधारित एक अलग गतिविधि प्राप्त करना चाहता है? – Androider

+0

बहुत, बहुत अच्छा दृष्टिकोण, धन्यवाद! –

5

एक और तरीका है कि ऐसा करने के लिए उपयोग कर रहा है: यदि उपयोगकर्ता या लॉग ऑन नहीं है क्या दूसरी गतिविधि आशय के माध्यम से शुरू करने के लिए आप के आधार पर तय एक गतिविधि (मेनिफ़ेस्ट में सेट), तो इस गतिविधि है शुरू करने के लिए है activity-alias

  1. प्रकट में:

    <activity 
        android:name=".LoginActivity" 
        android:icon="@drawable/ic_launcher_main" 
        android:label="Login" > 
        <intent-filter> 
         <action android:name="android.intent.action.MAIN" /> 
         <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
    </activity> 
    
    <activity 
        android:name=".MainActivity" 
        android:icon="@drawable/ic_launcher_main" 
        android:label="MainActivity" > 
    </activity> 
    
    <activity-alias 
        android:name=".AliasActivity" 
        android:label="AliasActivity" 
        android:enabled="false" 
        android:targetActivity=".MainActivity" > 
        <intent-filter> 
         <action android:name="android.intent.action.MAIN" /> 
         <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
    </activity-alias> 
    

    लॉगिन गतिविधि में 2.Somewhere:

    String s = getApplicationContext().getPackageName(); 
    ComponentName cm = new ComponentName(s, s+".AliasActivity"); 
    ComponentName cm2 = new ComponentName(s, s+".Login"); 
    PackageManager pm = this.getPackageManager(); 
    pm.setComponentEnabledSetting(cm, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 1); 
    pm.setComponentEnabledSetting(cm2, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); 
    

उसके बाद, अनुप्रयोग एक बार मार डाला जाएगा और अगली बार जब आप का शुभारंभ ऐप, मेनएक्टिविटी लॉन्चर होगा।

+1

कूल !! एकमात्र समाधान जो यूआई थ्रेड पर अतिरिक्त गतिविधि और साझा प्राथमिकताओं को पढ़ने की आवश्यकता नहीं है। आप 0 या 1 के बजाय FlagManager.DONT_KILL_APP ध्वज का उपयोग कर सकते हैं, इसलिए ऐप बाहर नहीं निकलेगा। अभी भी एक मुद्दा है जो मुझे इसका उपयोग करने से रोकता है: एंड्रॉइड स्टूडियो से अगला रन विफल रहता है। (गतिविधि अक्षम है) – auval

+0

मैंने मुख्य गतिविधि के लिए एक रन कॉन्फ़िगरेशन जोड़कर इस सीमा के आसपास काम किया।तो यह समाधान अच्छी तरह से काम करता है – auval

+0

यह उत्तर उस व्यक्ति को लगता है जिसे स्वीकार किया जाना चाहिए। –

0

जैसा कि ऊपर @auval ने कहा, मैं नीचे कोड का परीक्षण करता हूं और यह अच्छा करता है! अब जब आप पहली बार लांच

private void changeLauncher() { 
     String s = getApplicationContext().getPackageName(); 
     ComponentName cm = new ComponentName(s, s + ".AliasActivity"); 
     ComponentName cm2 = new ComponentName(s, s + ".LauncherActivity"); 
     PackageManager pm = this.getPackageManager(); 
     pm.setComponentEnabledSetting(cm, 
      PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
      PackageManager.DONT_KILL_APP); 
     pm.setComponentEnabledSetting(cm2, 
      PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
      PackageManager.DONT_KILL_APP); 
     } 

,:

<activity 
    android:name=".LauncherActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN"/> 
     <category android:name="android.intent.category.LAUNCHER"/> 
    </intent-filter> 
</activity> 

<activity 
    android:name=".MainActivity"> 
</activity> 

<activity-alias 
    android:name=".AliasActivity" 
    android:enabled="false" 
    android:targetActivity=".MainActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN"/> 
     <category android:name="android.intent.category.LAUNCHER"/> 
    </intent-filter> 
</activity-alias> 

दूसरे, आप इन कोड कहीं MainActivity.class में डाल कर सकते हैं: सबसे पहले, AndroidManifest.xml फ़ाइल इस तरह दिखना है ऐप, लॉन्चर एक्टिविटी लॉन्च की जाएगी और जब आप ऐप से बाहर निकलेंगे, तो एप फिर से चलाएं, मेनएक्टिविटी लॉन्च की जाएगी।

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