检查 Activity 中的第一个 运行,并在 Android 中抑制另一个 activity

Checking first run of Activity, and suppressing another activity in Android

我正在使用另一个设置制作启动器应用程序 activity 以调整启动器。

现在,我不希望启动器在按下主页按钮时显示为合格,直到用户没有首先设置它(一旦应用程序通过通知下载,他们将被要求这样做)通过设置 activity.

所以,我可以从 运行ning 到 应用程序 的第一个 运行 之后抑制我的启动器 activity,如果不能,那么如何知道 activity.

的第一个 运行

PS: 我已经知道如何实现应用程序的第一个运行。

这是基于使用 Android Studio 的 "Start a new Android Studio project" 模板创建的 "Settings Activity" 项目。项目创建成功后,添加一个新的activity class(就是你当前项目中的启动器activity);对于这个例子,它是一个空的 activity.

public class HomeScreenActivity extends AppCompatActivity {
}

然后为 activity 添加 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",这是这里的重点。这样你的启动器 activity 将默认被禁用。您将在用户完成设置过程后更改其状态。

在这个例子中,我只是添加了一个 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);
}

希望对您有所帮助。