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.
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. –
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
@ozbek Umm, nicht für mich, ich bin noch neu. Also, wie würde ich 'CATEGORY_HOME' durch Code nach dem ersten Lauf aktivieren? –