Android6.0运行时权限
来源:互联网 发布:安卓源码之家 编辑:程序博客网 时间:2024/06/05 11:01
Android6.0系统中引用了运行时权限功能,从而更好的保护了用户的安全和隐私。
哪些是Android列出的危险权限
除了这个表里面的权限其他都是普通权限,直接在AndroidManifest.xml中申请即可。
危险权限的申请
1. 在AndroidManifest.xml中声明
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mengfeijia.playvideotest"> // 这里以写入权限为例 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> ... </application></manifest>
如果运行在6.0以下的系统上是没有问题的,如果在6.0或者更高的版本上就需要动态申请权限:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private VideoView videoView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(this,new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE },1); } else { initVideoPlay(); } } private void initVideoPlay() { File file = new File(Environment.getExternalStorageDirectory(), "movie.mp4"); videoView.setVideoPath(file.getPath()); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case 1: if (grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ initVideoPlay(); } else { Toast.makeText(this,"拒绝权限无法使用程序",Toast.LENGTH_SHORT).show(); finish(); } break; } } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn_play: if (!videoView.isPlaying()){ videoView.isPlaying(); } break; case R.id.btn_pause: if (videoView.isPlaying()){ videoView.pause(); } break; case R.id.btn_stop: if (videoView.isPlaying()){ videoView.resume(); } break; } } @Override protected void onDestroy() { super.onDestroy(); if (videoView != null){ videoView.suspend(); } }}
这样就可以成功使用了。
对于多个权限的写法:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); List<String> permissionList = new ArrayList<>(); if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION); } if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.READ_PHONE_STATE); } if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (!permissionList.isEmpty()){ String[] permissions = permissionList.toArray(new String[permissionList.size()]); ActivityCompat.requestPermissions(MainActivity.this,permissions,1); }else{ requestLocation(); } } private void requestLocation() { initLocation(); mLocationClient.start(); } private void initLocation() { // doSomethings } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case 1: if (grantResults.length > 0){ for(int result : grantResults){ if (result != PackageManager.PERMISSION_GRANTED){ Toast.makeText(this,"必须同意所有权限才能使用本程序",Toast.LENGTH_SHORT).show(); finish(); return; } } requestLocation(); } else { Toast.makeText(this,"发生为止错误",Toast.LENGTH_SHORT).show(); finish(); } break; default: break; } }}
可以看出我们使用集合来批量申请权限,只要有一个失败则都不能使用。
你是不是有学会一招批量声明权限的方法呢,如果有问题请留言。
阅读全文
1 0
- Android6.0 运行时权限
- Android6.0 运行时权限
- Android6.0运行时权限
- 【Android6.0】运行时权限
- Android6.0 运行时权限
- Android6.0 运行时权限
- Android6.0 运行时权限
- Android6.0运行时权限
- Android6.0运行时权限
- Android6.0---运行时权限
- Android6.0运行时权限
- Android6.0运行时权限
- android6.0运行时权限
- Android6.0 运行时权限
- Android6.0运行时权限。
- Android6.0运行时权限
- Android6.0运行时权限
- Android6.0运行时权限
- 2017-8-16 Struts2学习笔记四
- Qt5.8以上版本编译Oracle数据库的OCI驱动教程
- 理解转发与重定向
- leetcode[Diameter of Binary Tree]//待整理多种解法
- 1.算法基本要素
- Android6.0运行时权限
- java学习初探5之this关键字
- 用Javascript获取页面元素的位置
- java虚拟机
- fiddler filters 使用(fiddler只显示指定请求,fiddler不显示指定请求,即filter请求过滤)转自:http://blog.csdn.net/notejs/article/
- Game of the Rows CodeForces
- Apache2配置免费型DV SSL实现多域名多站点Https访问
- Nginx 负载均衡配置
- Spark基础-Scala集合的操作