繁体   English   中英

将活动放在首位

[英]Keep Activity on top

我想实现一个screenLock活动,该活动在用户锁定屏幕时触发。 我这样做了,但是如果用户打开“应用程序历史记录”,我会看到我的应用程序的两个活动:Sensitive-Activity和Lock-Activity。

如果用户单击堆栈中的Sensitive-Activity,它将成为前台,而​​不填充Lock-Activity。 通过这样做,我在这里遇到了一些严重的安全问题。

有人可以告诉我如何将“锁定活动”固定在顶部,甚至在用户单击其他活动时也可以显示吗?

ps.:Sensitive-Activity上的noHistroy不是解决方案,因为如果未激活锁,则用户将应用程序推送到后台后将无法访问该应用程序。

    <activity
        android:name=".Sensitive"
        android:configChanges="keyboardHidden|orientation|screenSize" />

    <activity
        android:name=".Lock"
        android:launchMode="singleInstance"
        android:screenOrientation="portrait" />

在清单文件中,从敏感活动中删除启动器标签。 之后,仅锁定活动将显示给用户。 当前,您可能已将两个活动都设置为启动器活动,因此您正在观看两个活动。

通过从后台(历史)运行代码加载敏感活动,以显示锁定活动。 您可以注册并实现应用程序生命周期回调

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM