2017-01-10 11 views
-1

Я делаю приложение запуска с другими настройками, чтобы настроить пусковую установку.Проверка первого запуска Activity и подавление другого действия в Android

Теперь я не хочу, чтобы пусковая установка отображалась как «толстая» при нажатии кнопки «Домой», пока пользователь не установил ее первым (их попросят сделать это после загрузки приложения через уведомления) через активности настроек.

Таким образом, я могу подавить свою пусковую деятельность с не работает до тех пор, после первого запуска приложения , а если нет, то как знать первый запуск в деятельности.

PS: Я уже знаю, как реализовать первый запуск приложения.

+0

Может ли оно отображаться, когда вы нажимаете кнопку «домой» независимо от того, но запускаете ли настройку «Активность», если она не была настроена в первую очередь? Также обратите внимание: вы не можете показывать уведомление, когда приложение загружается, вы ничего не сможете сделать до тех пор, пока приложение не будет запущено. –

+0

Разве это не так просто? [Отключить] (https://developer.android.com/guide/topics/manifest/activity-element.html#enabled) активность с намерением «CATEGORY_HOME» и [включить] (https://developer.android.com/ reference/android/content/pm/PackageManager.html # setComponentEnabledSetting% 28android.content.ComponentName,% 20int,% 20int% 29) это только после того, как пользователь выполнит настройку. – ozbek

+0

@ozbek Умм, не для меня, я все еще новичок. Итак, как мне включить код «CATEGORY_HOME» через код после первого запуска? –

ответ

3

Проект основан на проекте «Настройки», созданного с использованием шаблона «Начать новый проект для Android Studio» от Android Studio. После успешного создания проекта добавьте новый класс активности (это будет ваша активность запуска в вашем текущем проекте); для этого примера это простая пустая деятельность.

public class HomeScreenActivity extends AppCompatActivity { 
} 

Затем добавьте AndroidManifest.xml записи для этой деятельности:

<activity 
    android:name=".HomeScreenActivity" 
    android:enabled="false" 
    android:label="@string/app_name"> 
    <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> 

Обратите внимание на android:enabled="false", что является важной частью здесь. Таким образом, ваша активность запуска будет отключена по умолчанию. Вы измените его состояние после того, как пользователь проведет процесс настройки.

В этом примере я просто добавил SwitchPreference и изменил состояние HomeScreenActivity на основании щелчка пользователя.

private SwitchPreference prefEnableDisableHomeScreen; 
private PackageManager packageManager; 
private ComponentName homeScreenComponent; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.pref_general); 
    setHasOptionsMenu(true); 

    packageManager = getActivity().getPackageManager(); 
    homeScreenComponent = new ComponentName(getActivity().getApplicationContext(), 
      HomeScreenActivity.class); 

    prefEnableDisableHomeScreen = (SwitchPreference) findPreference("enable_disable_home_screen"); 
    prefEnableDisableHomeScreen.setChecked(getIsComponentEnabled(homeScreenComponent)); 

    prefEnableDisableHomeScreen.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
     @Override 
     public boolean onPreferenceChange(Preference preference, Object o) { 
      boolean previousState = prefEnableDisableHomeScreen.isChecked(); 
      setComponentEnabledSetting(homeScreenComponent, previousState 
        ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED 
        : PackageManager.COMPONENT_ENABLED_STATE_ENABLED); 
      prefEnableDisableHomeScreen.setChecked(getIsComponentEnabled(homeScreenComponent)); 

      return false; 
     } 
    }); 
} 

private boolean getIsComponentEnabled(ComponentName componentName) { 
    int state = packageManager.getComponentEnabledSetting(componentName); 
    return PackageManager.COMPONENT_ENABLED_STATE_ENABLED == state; 
} 

private void setComponentEnabledSetting(ComponentName componentName, int newState) { 
    packageManager.setComponentEnabledSetting(componentName, newState, PackageManager.DONT_KILL_APP); 
} 

Надеюсь, это поможет.