我想实现一个screenLock活动,只要用户锁定屏幕就会触发该活动。 我这样做了,但如果用户打开应用程序历史记录,我会看到我的应用程序的两个活动:敏感活动和锁定活动。
如果用户点击堆栈中的Sensitive-Activity,它就会显示前景,而不会填充Lock-Activity。通过这样做,我在这里有一些严重的安全问题。
有人可以告诉我,我怎么能' pin'锁定活动位于顶部,即使用户点击其他活动也会显示出来?
ps。:Sensitive-Activity上的noHistroy不是一个解决方案,因为如果没有激活锁定,那么一旦用户推送到后台,用户就无法访问该应用程序。
<activity
android:name=".Sensitive"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity
android:name=".Lock"
android:launchMode="singleInstance"
android:screenOrientation="portrait" />
答案 0 :(得分:0)
在清单文件中,从敏感活动中删除启动器代码。 之后,只有锁定活动会显示给用户。目前您可能已将这两项活动都设置为启动器活动,因此您正在观看两项活动。
答案 1 :(得分:0)
通过从后台(历史记录)运行代码加载敏感活动来显示锁定活动。 您可以注册并实现Application lifecycle回调
public class ForegroundWatchdog implements Application.ActivityLifecycleCallbacks {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(final Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
}
注册回调:
public class SomeActivity extends Activity {
Context appCtx = getApplicationContext();
if (appCtx instanceof Application) {
ForegroundWatchdod foregroundWatchdog = new ForegroundWatchdog();
Application application = (Application)appCtx;
application.registerActivityLifecycleCallbacks(foregroundWatchdog);
}
}