2015-01-20 2 views

ответ

1

У вас может быть активность Launcher, чтобы открыть любую активность после выполнения логики, например, если пользователь впервые открыл приложение и у него нет никаких регистрационных данных или всего, что вы можете отправить ему в Intro и то, если приложение открывается после запуска Intro (вы можете сохранить некоторые переменные в настройках), вы можете перенаправить их на другое действие, такое как Main или что-то в этом роде, я делаю это в приложении, которое у меня работает, и я думаю, что некоторые другие делают это такой же предмет тоже (подобный Telegram).

Вот пример того, что я имею в виду.

<?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> 

Это в примере будет также поймать любой Intent для обмена изображений и текста, то в вашем пусковом вы можете открыть действие с действием вы хотите выполнить из этих акций фактически.

Затем из этой пусковой деятельности вы можете иметь что-то вроде этого ...

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 репо также для их примера. Надеюсь, это поможет вам.

0

Почему бы не унаследовать от android.app.Application и решить, какой Activity будет показан во время onCreate().

Примечание: Вы должны также изменить manifest.xmlandroid:name тег в .MyAppplication.

Somthing так:

Продлить 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".

+0

Можете ли вы объяснить, как я могу выбрать, какую активность следует начинать с переопределения onCreate() в переопределяющем классе Application? –

+0

@WiseShepherd см. Мое обновление. – Leigh

0

Для достижения этой цели вы можете использовать SharedPreferences. Просто объявите свою SetupActivity активностью по умолчанию в вашем манифесте. Затем в методе onCreate проверьте, был ли инициализирован один var внутри SharedPreferences, и если это так, создайте Intent для вашего MainActivity.

Если он не был инициализирован, продолжайте процесс установки, и как только он завершит инициализацию var в ваших SharedPreferences.

2

Простой редактировать в файл 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> 

Как вы можете видеть в приведенном выше примере, ActivityToStart будет открываться при запуске приложения, поскольку она имеет android.intent.action.MAIN этикетку. Просто переместите эту метку в действие, которое вы хотите запустить, когда приложение открывается. Если вы хотите 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 вы хотите начать с открытия приложения, так как это используется для регистрации по умолчанию Activity с помощью программы запуска Android.

С другой стороны, если вы хотите запустить 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 будет, каждый раз приложение запускается, проверьте, чтобы увидеть, если SharedPreferencefirstLaunch право существует. Если это NOT, это означает, что приложение никогда ранее не запускалось, а ключ firstLaunch был создан и добавлен в SharedPrefernces; это также, где вы хотите запустить свой учебник Activity. С другой стороны, если существует firstLaunchSharedPreference, это означает, что приложение было запущено раньше, поэтому вы просто начинаете свой стандарт Activity.

+0

Спасибо за ответ, но я не думаю, что вы понимаете вопрос. Я только хочу изменить точку входа в первом запуске, чтобы я мог запустить экран настройки. Ваше решение изменяет точку входа для запуска любого приложения. –

+0

Я понимаю. Я внесла поправки в свой ответ – Willis

Смежные вопросы