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卡权限”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注创新互联行业资讯频道。


网页标题:android6.0中如何写入SD卡权限-创新互联
网页链接:http://scyanting.com/article/iipsi.html