android6.0的写入SD卡的权限申请
2017-01-22 00:21
483 查看
6.0的手机对于写入手机需要申请权限的我做了如下处理下面我贴出代码
package com.example.admin.sdapplication;import android.Manifest;import android.app.Dialog;import android.content.DialogInterface;import android.content.pm.PackageManager;import android.os.Build;import android.os.Bundle;import android.os.Environment;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStreamReader;public class SdkActivity extends AppCompatActivity implements View.OnClickListener{private Button btn_write;private Button btn_read;final int REQUEST_WRITE=1;//申请权限的请求码@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_sdk);btn_write= (Button) findViewById(R.id.btn_write);btn_read= (Button) findViewById(R.id.btn_read);btn_read.setOnClickListener(this);btn_write.setOnClickListener(this);}private void showAlert(){Dialog alertDialog = new AlertDialog.Builder(this).setTitle("权限说明").setMessage("我们需要这个权限给你提供存储服务").setIcon(R.drawable.ic_launcher).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub//2、申请权限: 参数二:权限的数组;参数三:请求码ActivityCompat.requestPermissions(SdkActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE);}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub}}).create();alertDialog.show();}@Overridepublic void onClick(View view) {switch (view.getId()){case R.id.btn_read:String s= readToSdCard();Log.i("readTosdCard",s);break;case R.id.btn_write://判断是否6.0以上的手机 不是就不用if(Build.VERSION.SDK_INT>=23){//判断是否有这个权限if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){//第一请求权限被取消显示的判断,一般可以不写if (ActivityCompat.shouldShowRequestPermissionRationale(SdkActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)){Log.i("readTosdCard","我们需要这个权限给你提供存储服务");showAlert();}else {//2、申请权限: 参数二:权限的数组;参数三:请求码ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE);}}else {writeToSdCard();}} else{writeToSdCard();}break;}}//写数据public void writeToSdCard(){//1、判断sd卡是否可用if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//sd卡可用//2、获取sd卡路径File sdFile=Environment.getExternalStorageDirectory();File path=new File(sdFile,"a.txt");//sd卡下面的a.txt文件 参数 前面 是目录 后面是文件try {FileOutputStream fileOutputStream=new FileOutputStream(path);fileOutputStream.write("hello".getBytes());} catch (Exception e) {e.printStackTrace();}}}//读数据public String readToSdCard(){StringBuilder stringBuilder = null;if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){File sdFile=Environment.getExternalStorageDirectory();File path=new File(sdFile,"a.txt");stringBuilder =new StringBuilder();try {FileInputStream fileInputStream=new FileInputStream(path);BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(fileInputStream));String str;while ((str=bufferedReader.readLine())!=null){stringBuilder.append(str);}} catch (Exception e) {e.printStackTrace();}}return stringBuilder.toString();}//判断授权的方法 授权成功直接调用写入方法 这是监听的回调//参数 上下文 授权结果的数组 申请授权的数组@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if(requestCode==REQUEST_WRITE&&grantResults[0]== PackageManager.PERMISSION_GRANTED){writeToSdCard();}}}其实就是判断是不是6.0的手机再进行申请权限的处理 利用申请权限的回调机制直接在权限申请下来之后调用写入处理注释很清楚 你们看看代码就好了( ⊙ o ⊙ )!另外需要注意的一点我们也处理了第一次用户拒绝权限,第二次需要请求时,给用户提示权限作用
//第一请求权限被取消显示的判断,一般可以不写if (ActivityCompat.shouldShowRequestPermissionRationale(SdkActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)){Log.i("readTosdCard","我们需要这个权限给你提供存储服务");showAlert();}else {//2、申请权限: 参数二:权限的数组;参数三:请求码ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE);}
相关文章推荐
- Android动态创建ListView视图,动态增加和删除Item.
- 原来我之前并不懂:Android之Spanned flag
- 01-android与 MVC设计模式
- Android学习笔记(7)-读取系统联系人
- android cmake 调试
- MVP模式在Android开发中的应用
- Android 弹性ScrollView
- Android下拉刷新与轮播图冲突解决方案
- 02-android之View
- android 学习笔记14- 项目实战 基类抽取 标题定义 界面滑动
- Android进阶之AlertDialog自定义
- 2017最新最有价值的Android视频教程(包括传智播客/最新黑马等视频教程)
- Ionic2入门教程03:Android Studio教程从入门到精通
- android坐标系和视图坐标系
- 谈谈学习Android的不足
- Android自定义时间选择器,支持YMDHMS,YMD,HMS,HM常用类型,支持过去时间过滤
- Android mipmap文件夹和drawable文件夹的区别
- Android性能优化系列之内存优化
- Android性能优化系列之内存优化
- Android编程权威指南(第二版)学习笔记(十八)—— 第18章 Assets