用户按下主页按钮时Android检查应用是否达到了后台?

时间:2013-11-29 11:33:38

标签: android android-intent

我是Android新手,我需要知道应用程序从后台恢复时我需要显示密码锁定屏幕我跟着this链接并且能够获取它但是每当我用来调用相机意图或图库时选择意图应用程序将进入后台并出现锁定屏幕,而我需要知道应用程序是否在用户主页按钮上按下了背景

5 个答案:

答案 0 :(得分:2)

将“好”行动列入白名单

我建议你试着反过来考虑一下。对于您希望用户执行的操作(如启动相机或从库中选择),您可以将该操作列入白名单。

这样,如果任何其他原因导致应用程序进入后台(例如用户接到电话),您可以在返回时显示锁定屏幕。

当您启动相机或图库活动时,您可以定义自定义requestCode,并在他们通过onActivityResult

返回您的应用时进行检查

这样的事情:

private static final String MIME_TYPE = "image/*";
private static final int MY_GALLERY_REQUEST_CODE = 90210;

private void launchGallery()
{
    Intent i= new Intent();
    i.setType(MIME_TYPE);
    i.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(i, MY_GALLERY_REQUEST_CODE);
}


protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{   
    if (requestCode == MY_GALLERY_REQUEST_CODE) 
    {  
        //user is returning from the gallery picker
    } 
    else  
    {
        showLockScreenIfNeeded();
    }
}

@Override
protected void onResume()
{
    showLockScreenIfNeeded();
}

同样来自:其他答案:onActivityResult() & onResume()

应在onActivityResult()

之前调用

onResume()

来自文档:

  

protected void onActivityResult(int requestCode,int resultCode,   意图数据)

     

自:API级别1当您启动的活动退出时,会调用   你启动它的requestCode,它返回的resultCode,   以及来自它的任何其他数据。 resultCode将是   RESULT_CANCELED如果活动明确返回,则没有   返回任何结果,或在其运行期间崩溃。 你会收到的   当您的活动开始时,紧接在onResume()之前的此调用   重新起动。

答案 1 :(得分:1)

您可以使用以下方法进行检查

@Override
protected void onUserLeaveHint() 
{
   super.onUserLeaveHint();
   // Put your code here
}

答案 2 :(得分:1)

onResume()(或onStart())不能用于您的目的,因为只要活动变得可见,就会调用回调。

而不是它,您可以覆盖onNewIntent(Intent),然后检查意图内的标志上是否设置了Intent.FLAG_BROUGHT_TO_FRONT

当您的活动从背景到最前面的任务(通常通过按已经运行的应用程序的应用程序图标)时,Android系统会自动设置该标记。当您从其他活动(如相机或图库)返回活动以附加图片时,这是 NOT 设置。请注意,为了使用该标志,您应该将活动的启动模式设置为“singleTask”。有关详细信息,请参阅http://developer.android.com/reference/android/R.styleable.html#AndroidManifestActivity_launchMode

答案 3 :(得分:1)

连续检查以下代码,这意味着你可以使用Timer类。

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    List<RunningTaskInfo> runningTasks = null;
    try {
        runningTasks = activityManager.getRunningTasks(1);
    } catch (Exception e) {

    }
    RunningTaskInfo runningTaskInfo = runningTasks.get(0);
    ComponentName topActivity = runningTaskInfo.topActivity;
if(topActivity.getPackageName().equals(your packagename)){
       S.o.p("fine");}
else{
       S.o.p.("application sent to background");}

答案 4 :(得分:1)

我找到了使用I described克服问题@pjco solution的方法。

为了能够显示锁定屏幕,即使从第三方活动转到后台,只需在启动这些活动时使用FLAG_ACTIVITY_NO_HISTORY

Intent intent = new Intent(Intent.ACTION_PICK, Images.Media.INTERNAL_CONTENT_URI);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivityForResult(intent, REQCODE_PICK_GALLERY);