检查 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);
}
希望对您有所帮助。
我正在使用另一个设置制作启动器应用程序 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);
}
希望对您有所帮助。