保持活动在最前面

时间:2018-05-24 20:17:42

标签: android android-activity

我想实现一个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" />

2 个答案:

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