Marshmallow 权限:组件生命周期

Marshmallow permission : Component Lifecycle

查看棉花糖权限模式,它在 Activity 或 Fragment 的 onResume() 之前调用 onRequestPermissionsResult()

问题陈述:

如果我们对操作结果执行任何操作(即允许权限),比如我想删除当前片段,那么这是不可能的,因为片段和容器 activity 都处于暂停状态。那么有什么办法可以在 onRequestPermissionsResult() 之前调用 onResume() 吗?

解决方案,我正在使用

我正在使用标志来获得许可,该标志正在 onRequestPermissionsResult() 上重置并在 onResume() 上得到验证。但就我而言,这似乎是一种令人困惑的方式。

无法更改执行这些回调的顺序,但您可以轻松 hack-around。我将展示两种不同的方式:

简单post:

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