當用戶第一次運行我的應用時,我需要他們運行一組簡短的安裝/教程活動。Android應用的替代入口活動
如何設置我的應用程序以便在第一次運行時打開SetUpActivity而不是MainActivity?
當用戶第一次運行我的應用時,我需要他們運行一組簡短的安裝/教程活動。Android應用的替代入口活動
如何設置我的應用程序以便在第一次運行時打開SetUpActivity而不是MainActivity?
例如,如果用戶第一次打開該應用程序,並且它沒有任何註冊數據或任何您可以將其發送給Intro的任何活動,您可以在啓動邏輯後打開任何活動,例如,那麼如果應用程序在Intro執行後打開(您可以在首選項中保存一些變量),則可以將它們重定向到Main之類的另一個活動,我在運行的應用程序中執行此操作,並且我認爲其他人執行該操作同樣的事情(如電報)。
這裏是我的意思的一個例子。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.app" >
<application
android:name=".App"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:hardwareAccelerated="true"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:name=".activity.Launcher"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:hardwareAccelerated="true"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="video/*"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="*/*"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="*/*"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="vnd.android.cursor.item/vnd.org.telegram.messenger.android.profile"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="telegram.me" android:scheme="http" />
<data android:host="telegram.me" android:scheme="https" />
</intent-filter>
<intent-filter android:icon="@drawable/ic_launcher" android:priority="1">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tg" />
</intent-filter>
</activity>
</application>
</manifest>
用這個例子也將趕上分享圖像和文本的任何意圖,然後在你的發射器,你可以用你想從這些股票的意圖執行的操作打開相應的活動。
然後從啓動活動,你可以有這樣的事情......
package com.company.app.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
/**
* Created by eefret on 23/12/14.
*/
public class Launcher extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// be sure to get your preference accordingly
if(somePreference == true){
startActivity(new Intent(this, MainActivity.class));
}
Intent intent = new Intent(this, IntroActivity.class);
startActivity(intent);
}
}
這樣,你可以有你想要的任何情況下,你的應用程序靈活的開始......您可以檢查電報GitHub庫也爲他們的運行示例。希望它能幫助你。
爲什麼不從android.app.Application
繼承並決定在onCreate()
期間顯示哪個Activity
。
注意:您也應該將manifest.xml
android:name
標籤更改爲.MyAppplication
。
財產以後這樣的:
擴展Application
:
public class MyAppplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Get value from data store
boolean showTutorial = true;
if (showTutorial) {
Intent intent = new Intent(this, SettingsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else {
Intent intent = new Intent(this, SettingsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
}
更新您的manifest.xml
:
<application
android:name=".MyAppplication"
android:allowBackup="true"
android:icon="@drawable/icon64"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".screens.SplashScreenActivity"
android:label="@string/title_activity_splash_screen"
android:screenOrientation="portrait"
android:theme="@style/Theme.Splash" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
注意:在android:name=".MyAppplication"
的使用。
您可以使用SharedPreferences來實現此目的。只需將您的SetupActivity聲明爲清單中的默認活動即可。然後在你的onCreate方法上,檢查SharedPreferences中的一個var是否已經初始化,如果是這樣的話,爲你的MainActivity創建一個Intent。
如果尚未初始化,請繼續安裝過程,一旦完成,請在SharedPreferences中初始化var。
一個簡單的編輯你的AndroidManifest.xml
文件就可以了:
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name">
<activity
android:name=".ActivityToStart"
android:label="@string/activity_helmet_remote_name"
android:theme="@style/themeLight">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".AlternateActivity1"
android:theme="@style/themeLight">
</activity>
<activity
android:name=".AlternateActivity2"
android:theme="@style/themeLight">
</activity>
</application>
正如你可以在上面的例子中看到,當應用程序啓動,因爲它具有android.intent.action.MAIN
標籤ActivityToStart
將打開。只需將該標籤移動到應用程序打開時要啓動的活動即可。如果你想AlternativeActivity1
當您打開應用程序,然後開始你的AndroidManifest.xml
文件看起來像下面這樣:
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name">
<activity
android:name=".ActivityToStart"
android:label="@string/activity_helmet_remote_name"
android:theme="@style/themeLight">
</activity>
<activity
android:name=".AlternateActivity1"
android:theme="@style/themeLight">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".AlternateActivity2"
android:theme="@style/themeLight">
</activity>
</application>
您還希望確保移動LAUNCHER
線...
<category android:name="android.intent.category.LAUNCHER" />
到您希望在打開應用程序時啓動Activity
,因爲這用於在Android啓動器中註冊默認Activity
。
另一方面,如果您希望僅啓動Activity
一次,則需要使用SharedPreferences
。 SharedPreferences
允許您保存可在應用程序中全局訪問的值。一個簡單的方法就是設置一個簡單的Activty
,每次開始,它會檢查教程是否應該啓動,或者是否應該啓動主要的Activity
。像下面這樣:
public class StartupActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
/** Create the Activity */
super.onCreate(savedInstanceState);
setContentView(R.layout.startup_activity);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
if (!sharedPreferences.contains("firstLaunch"))
{
// Add SharedPreferences key ("firstLaunch")
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("firstLaunch", 1);
editor.commit();
// Launch tutorial Activity here...
}
else
{
// "firstLaunch" preference exists, which means application has been launched before
// Launch primary activity here...
}
}
以上Activity
會,每次啓動應用程序時,請檢查是否SharedPreference
題爲firstLaunch
存在。如果它確實是不是,那意味着應用程序以前從未啓動過,並且firstLaunch
密鑰已創建並添加到SharedPrefernces
;這也是你想從中啓動你的教程Activity
的地方。另一方面,如果firstLaunch
SharedPreference
確實存在,這意味着應用程序已經啓動之前,所以你只需開始你的標準Activity
。
謝謝你的回答,但我不認爲你理解這個問題。我只想在第一次運行時修改入口點,以便我可以運行設置屏幕。您的解決方案會更改每個應用運行的入口點。 – 2015-01-20 23:14:50
我明白了。我修改了我的答案 – Willis 2015-01-21 16:15:34
你能解釋一下,我可以通過覆蓋Application類中的onCreate()來選擇哪個Activity? – 2015-01-20 22:55:45
@WiseShepherd看到我的更新。 – Leigh 2015-01-20 23:15:40