棉花糖许可:组件生命周期

时间:2016-01-05 14:39:57

标签: android android-lifecycle android-permissions android-6.0-marshmallow

查看marshmallow权限模式,它会在onRequestPermissionsResult()活动或片段之前调用onResume()

问题陈述:

如果我们对Action结果执行了任何操作(即允许权限),就像我想删除当前片段一样,那么它是不可能的,因为片段和容器活动都处于暂停状态。那么有没有办法在onResume()之前调用onRequestPermissionsResult()

解决方案,我正在使用

我正在使用标记获取权限,该标记正在onRequestPermissionsResult()重置并在onResume()上进行验证。但在我看来,这似乎令人困惑。

1 个答案:

答案 0 :(得分:4)

没有办法改变实施这些回调的顺序,但你可以很容易地解决它。我将展示两种不同的方式:

只需发布:

private static final Handler uiHandler = new Handler(Looper.getMainLooper());

@Override
public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) {
    if(... condition ...)
        uiHandler.post(onPermission_condition);
}

private Runnable onPermission_condition = new Runnable(){
    @Override
    public void run(){
        ... do stuff here
    }
}

}

使用标志:

private boolean shouldDoStuff = false;

@Override
public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) {
    if(... condition ...)
        shouldDoStuff = true;
}

@Override
public void onResume(){
  super.onResume();
  if(shouldDoStuff) {
     shouldDoStuff = false;
     ... do stuff here  
  }
}