Android6.0 有关权限的研究(第二版)

来源:互联网 发布:windows 无线触摸板 编辑:程序博客网 时间:2024/06/01 23:50

检查是否可以使用该权限,调用

ContextCompat.checkSelfPermission()

例如:

ContextCompat.checkSelfPermission(thisActivity,    Manifest.permission.WRITE_CALENDAR);

如果应用有该权限,该方法将返回
PackageManager.PERMISSION_GRANTED ,应用可以进行相关的操作。
如果应用不能使用该权限,该方法将返回PERMISSION_DENIED ,这时应用将必须要向用户申请该权限。

应用没有所需的权限时,应用必须调用ActivityCompat.requestPermissions(
Activity activity, String[] permissions, int requestCode)
方法来申请对用的权限。

在用户响应了请求权限的对话框之后,系统会调用对用的回调方法来通知结果,并且会传递在reqeustPermissions()方法中的request code。(在Android6.0之前调用的时候会直接去调用onRequestPermissionsResult()的回调方法)

好了好了,抄书就抄到这了,我们来看看下面,非常简单的几步代码就可以解决的。

下面这些需要申请的权限,每个类别只需要申请一个,其他便会自动获权。
需要申请的权限
以定位和存储权限为例:(自己写的一个类,没有涉及太多细节,但初学者正常使用足够)
PremissionBase类:

public class PremissionBase {    private static final int PERMISSION_REQUESTCODE = 100;    List<String>premissionList = new ArrayList<>();    public void achievepremissions(String[] premissions,Activity activity){        for(String premission : premissions) {            if (ContextCompat.checkSelfPermission(activity,premission)                 != PackageManager.PERMISSION_GRANTED){                premissionList.add(premission);            }        }        if (!premissionList.isEmpty()){            ActivityCompat.requestPermissions(activity,                    premissionList.toArray(new String[premissionList.size()]),PERMISSION_REQUESTCODE);        }    }}

在MainActivity中写一个String[]就可以将多个权限一并申请了:

final String[] premissions = {                Manifest.permission.WRITE_EXTERNAL_STORAGE,                Manifest.permission.ACCESS_FINE_LOCATION};

然后:

premissionBase.achievepremissions(premissions,MainActivity.this);

完整MainActivity:

public class MainActivity extends AppCompatActivity {    PremissionBase premissionBase = new PremissionBase();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        final String[] premissions = {                Manifest.permission.WRITE_EXTERNAL_STORAGE,                Manifest.permission.ACCESS_FINE_LOCATION};        Button button = findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {            premissionBase.achievepremissions(premissions,MainActivity.this);            }        });    }}

这里我只是写了单纯的申请,什么reqeustPermissions()啊,什么回调啊,我没写,其实很简单,功能就是在用户按了什么之后可以做一些额外操作,有时候可有可无,需要时自行添加吧。

0 0