2017-01-10 5 views
-1

Ich mache eine Startanwendung mit einer anderen Einstellungsaktivität, um den Launcher zu optimieren.Überprüfen der ersten Ausführung der Aktivität und Unterdrücken einer anderen Aktivität in Android

Nun möchte ich nicht, dass der Launcher beim Drücken der Home - Taste als auslösbar angezeigt wird, bis der Benutzer sie nicht erst eingerichtet hat (sie werden aufgefordert, dies zu tun, sobald die App über Benachrichtigungen heruntergeladen wird) Einstellungen Aktivität.

So kann ich meine launcher Aktivität unterdrücken, bis nach dem ersten Laufe von Anwendung, und wenn nicht vom Laufen, dann, wie ersten Laufe einer Aktivität kennen.

PS: Ich weiß bereits, wie man den ersten Lauf der Anwendung implementiert.

+0

Kann es angezeigt werden, wenn Sie die Home-Taste trotzdem drücken, aber die Setup-Aktivität ausführen, wenn sie nicht zuerst eingerichtet wurde? Beachten Sie auch: Sie können keine Benachrichtigung anzeigen, wenn die App heruntergeladen wird, Sie können nichts tun, bis die App ausgeführt wurde. –

+0

Ist das nicht einfach? [Deaktivieren] (https://developer.android.com/guide/topics/manifest/activity-element.html#enabled) die Aktivität mit 'CATEGORY_HOME' Absicht und [Aktivieren] (https://developer.android.com/ reference/android/content/pm/PackageManager.html # setComponentEnabledSetting% 28android.content.ComponentName,% 20int,% 20int% 29) erst nachdem der Benutzer das Setup durchläuft. – ozbek

+0

@ozbek Umm, nicht für mich, ich bin noch neu. Also, wie würde ich 'CATEGORY_HOME' durch Code nach dem ersten Lauf aktivieren? –

Antwort

3

Dies basiert auf dem Projekt "Einstellungen Aktivität", das mit der Android Studio-Vorlage "Ein neues Android Studio-Projekt starten" erstellt wurde. Nachdem das Projekt erfolgreich erstellt wurde, fügen Sie eine neue Aktivitätsklasse hinzu (dies wäre Ihre Startaktivität in Ihrem aktuellen Projekt). In diesem Beispiel handelt es sich um eine leere Aktivität.

public class HomeScreenActivity extends AppCompatActivity { 
} 

Dann fügen Sie AndroidManifest.xml Einträge für diese Aktivität:

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

Achten Sie auf android:enabled="false", das ist der wichtige Teil hier. Auf diese Weise wird Ihre Launcher-Aktivität standardmäßig deaktiviert. Sie ändern den Status, nachdem der Benutzer den Einrichtungsvorgang durchlaufen hat.

In diesem Beispiel habe ich einfach einen SwitchPreference hinzugefügt und den Status HomeScreenActivity basierend auf dem Benutzerklick geändert.

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); 
} 

Hoffe das hilft.

Verwandte Themen