2015-10-06 113 views
0

我需要我的應用程序將一項活動(註冊)作爲首次安裝應用程序時啓動的第一項活動,但在初始運行後它會有一個不同的活動(LogInActivity)成爲第一個啓動的活動......我把代碼放在這使得Register活動只運行一次,但我無法弄清楚如何改變我的清單以獲得期望的結果。我曾嘗試將MAIN操作移動到註冊活動,但這會導致每次運行我的應用程序時都會啓動它。當MAIN操作在LogInActivity中時,Register完全不運行。我還嘗試在我的清單中添加一個DEFAULT動作,這個動作與我進行MAIN動作的地方相反,但這也不起作用,並且在進一步研究什麼是DEFAULT時我不相信這是我需要的。那麼是否還有其他意圖需要添加到我的XML中?如何使活動成爲首次啓動的活動,但僅限於第一次運行的應用程序

清單:

<application 
    android:allowBackup="true" 
    android:icon="@drawable/skey" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

///////////FIND INFO ACTIVITY 
    <activity 
     android:name=".FindInfoActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.LogInActivity" /> 

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

    //////////LOG IN ACTIVITY 
    <activity 
     android:name=".LogInActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.LogInActivity" /> 
      <action android:name="android.intent.action.MAIN" /> 

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

    //////////REGISTER ACTIVITY 
    <activity 
     android:name=".Register" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.LogInActivity" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 

回答

1

除非您希望用戶能夠從主屏幕從三個獨立項目(這裏有有效的用例,但實際不是這樣)啓動應用程序,否則不要有三個獨立的LAUNCHER活動。

有一個處理啓動應用程序的活動。它會檢查SharePreferences中的布爾值,然後從那裏開始適當的活動。然後,只需完成活動,以便用戶在按「返回」時不會重新打開該活動。

public class LauncherActivity extends Activity { 

    @Override 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    if (firstTimeRunning()) { 
     // start register activity. 
    } else { 
     // start login activity. 
    } 
    finish(); 
    } 
} 

清單中只有這個活動爲:

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

你並不需要爲您的註冊活動或登錄活動的任何IntentFilters因爲這些都是從來沒有經歷過隱含意圖打開,它們也沒有任何特殊的權限(從我能看到的)。

+0

所以你是說我需要做每一次MAIN時想要啓動的活動,並檢查同一活動中的sharedpreferences? – thatdude1087

+0

是的。您無法更改清單。 – DeeV

+0

清楚,工作......至少在模擬器..我都快要嘗試一個安裝在真實設備上,但現在我的問題是如何將應用程序知道要啓動註冊activiy第一時,應用程序是第一個跑?我知道如何知道在其餘時間首先運行LogInActivity,但感到困惑。 – thatdude1087

1

使用SharedPreference。在你的第一個活動的onCreate()做到這一點

SharedPreferences shared; 
shared=getSharedPreferences("com.example", Context.MODE_PRIVATE); 
shared.edit().putBoolean("first_time",true).apply(); 

:當你打開應用程序第一次做這個

SharedPreferences shared; 
shared=getSharedPreferences("com.example", Context.MODE_PRIVATE); 
if(shared.getBoolean("first_time",false)){ 
startActivity(new Intent(FirstActivity.this, NewFirstActivity.class)); 
finish(); 
} 

是最簡單的方法來「存儲」數據和狀態。 SharedPreference還用繩子,詮釋價值觀等方面的工作(如果你不想布爾值)

+0

我已經設置了共享偏好......請在嘗試回答問題之前閱讀整篇文章,..在我的帖子中,我聲明:我已經把代碼放在這使得註冊活動只運行一次,但我不知道如何改變我的清單,以獲得所需的結果。 – thatdude1087

+0

但是你不能......你只有1次發射活動並宣佈剩下的......他們甚至沒有訂單(如果你只想打開)。這就是爲什麼SharedPreference是最好的選擇。 –

0

在你Manifest您應該只有一個發射器類,在同一類的onCreate方法檢查病情已經登錄(SharedPreference) 。如果是,則使用Intent啓動HomeActivity,否則啓動LoginActivity,如果用戶已註冊並註銷。當用戶登錄時,在SharedPreference中保存帳戶ID /會話詳細信息/用戶詳細信息,您可以在啓動程序類中驗證是否啓動特定活動。

+0

我認爲爲了讓課程啓動期間,需要啓動器。我還需要其他課程才能首先推出。我認爲主要是先控制了什麼? – thatdude1087

+1

@ thatdude1087,你的理解錯了。啓動器適用於啓動器中顯示的每個圖標。如果您有兩個啓動器活動,則兩個啓動器圖標將出現在Android主啓動器中。如果你有三個,那麼你的啓動器會出現三個圖標,以此類推。 –

0

正如馬里亞諾所說,你可以使用SharedPreferences。如果您不想在啓動時打開設置,則可以使用對話框讓用戶決定進入設置或不執行任何操作。

順便說一下,我認爲使用SharedPreferences來存儲登錄信息(用戶名和密碼)是最好的做法,而不是每次啓動應用程序時都要求這些值。

相關問題