千家信息网

android6.0中如何写入SD卡权限

发表于:2024-12-01 作者:千家信息网编辑
千家信息网最后更新 2024年12月01日,本文小编为大家详细介绍"android6.0中如何写入SD卡权限",内容详细,步骤清晰,细节处理妥当,希望这篇"android6.0中如何写入SD卡权限"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢
千家信息网最后更新 2024年12月01日android6.0中如何写入SD卡权限

本文小编为大家详细介绍"android6.0中如何写入SD卡权限",内容详细,步骤清晰,细节处理妥当,希望这篇"android6.0中如何写入SD卡权限"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

代码如下:

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;//申请权限的请求码 @Override protected 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() {     @Override     public 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() {     @Override     public void onClick(DialogInterface dialog, int which) {      // TODO Auto-generated method stub     }    }).    create();  alertDialog.show(); } @Override public 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(); } //判断授权的方法 授权成功直接调用写入方法 这是监听的回调 //参数 上下文 授权结果的数组 申请授权的数组 @Override public 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);}

读到这里,这篇"android6.0中如何写入SD卡权限"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

0