alwaystest / Blog

24 stars 2 forks source link

EasyPermissions使用 #31

Open alwaystest opened 8 years ago

alwaystest commented 8 years ago

EasyPermissions使用

标签(空格分隔): Android


Android 6.0 以上增加了运行时权限,为了图方便,直接使用Google官方的EasyPermissions 0.1.9.

刚开始ReadME没有读清楚,犯了点小错误。记录一下。

文档的Basic这么写:

have your Activity (or Fragment) override the onRequestPermissionsResult method

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        // Forward results to EasyPermissions
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }

}

因为是一个回调方法,我以为需要首先有一个地方调用申请权限的方法,然后又在onCreate里面调用了下面的方法。申请权限。

private void requestPermission(){
        String[] perms = {Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE};
        if (!EasyPermissions.hasPermissions(this, perms)) {
            EasyPermissions.requestPermissions(this, getString(R.string.all_permission_retionale), REQUEST_PERMISSION, perms);
        }
    }

结果发现申请权限的窗口弹出了两次(拒绝给权限的情况下)。

最后发现,只要做了Basic的部分,Activity启动的时候就会自动检测需要申请的权限并自动申请。多加了一个申请权限的方法,就会导致出现两次申请权限的窗口。

所以应该是Activity里重写onRequestPermissionsResult方法,让应用自动检测权限(偷懒的办法,不推荐只做这么一次检测)。当调用需要权限的方法的时候,还需要再检测一次需要的权限,不然会崩溃的。

还有一个地方需要注意,如果应用没有使用AppCompat主题,EasyPermissions弹出Dialog的时候会导致Crash。