国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

android 6.0 寫入SD卡的權(quán)限申請實(shí)例講解

2019-12-12 00:37:39
字體:
供稿:網(wǎng)友

6.0的手機(jī)對于寫入手機(jī)需要申請權(quán)限的

我做了如下處理

下面我貼出代碼

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;//申請權(quán)限的請求碼 @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("權(quán)限說明").    setMessage("我們需要這個(gè)權(quán)限給你提供存儲(chǔ)服務(wù)").    setIcon(R.drawable.ic_launcher).    setPositiveButton("確定", new DialogInterface.OnClickListener() {     @Override     public void onClick(DialogInterface dialog, int which) {      // TODO Auto-generated method stub      //2、申請權(quán)限: 參數(shù)二:權(quán)限的數(shù)組;參數(shù)三:請求碼      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以上的手機(jī) 不是就不用    if(Build.VERSION.SDK_INT>=23){     //判斷是否有這個(gè)權(quán)限     if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){      //第一請求權(quán)限被取消顯示的判斷,一般可以不寫      if (ActivityCompat.shouldShowRequestPermissionRationale(SdkActivity.this,        Manifest.permission.WRITE_EXTERNAL_STORAGE)){       Log.i("readTosdCard","我們需要這個(gè)權(quán)限給你提供存儲(chǔ)服務(wù)");       showAlert();      }else {       //2、申請權(quán)限: 參數(shù)二:權(quán)限的數(shù)組;參數(shù)三:請求碼       ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE);      }     }else {      writeToSdCard();     }    } else{     writeToSdCard();    }    break;  } } //寫數(shù)據(jù) 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文件 參數(shù) 前面 是目錄 后面是文件   try {    FileOutputStream fileOutputStream=new FileOutputStream(path);    fileOutputStream.write("hello".getBytes());   } catch (Exception e) {    e.printStackTrace();   }  } } //讀數(shù)據(jù) 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(); } //判斷授權(quán)的方法 授權(quán)成功直接調(diào)用寫入方法 這是監(jiān)聽的回調(diào) //參數(shù) 上下文 授權(quán)結(jié)果的數(shù)組 申請授權(quán)的數(shù)組 @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();  } }}

其實(shí)就是判斷是不是6.0的手機(jī)再進(jìn)行申請權(quán)限的處理 利用申請權(quán)限的回調(diào)機(jī)制直接在權(quán)限申請下來之后調(diào)用寫入處理

注釋很清楚 你們看看代碼就好了( ⊙ o ⊙ )!

另外需要注意的一點(diǎn)我們也處理了第一次用戶拒絕權(quán)限,第二次需要請求時(shí),給用戶提示權(quán)限作用

//第一請求權(quán)限被取消顯示的判斷,一般可以不寫if (ActivityCompat.shouldShowRequestPermissionRationale(SdkActivity.this,  Manifest.permission.WRITE_EXTERNAL_STORAGE)){ Log.i("readTosdCard","我們需要這個(gè)權(quán)限給你提供存儲(chǔ)服務(wù)"); showAlert();}else { //2、申請權(quán)限: 參數(shù)二:權(quán)限的數(shù)組;參數(shù)三:請求碼 ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE);}

以上這篇android 6.0 寫入SD卡的權(quán)限申請實(shí)例講解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 从江县| 建瓯市| 泰宁县| 阿坝| 瑞丽市| 克山县| 鹿泉市| 青海省| 玉屏| 青海省| 陵水| 高安市| 遂宁市| 图木舒克市| 新营市| 太和县| 缙云县| 滁州市| 江都市| 康平县| 茌平县| 松原市| 石泉县| 津南区| 浏阳市| 松原市| 枝江市| 建德市| 兴城市| 兰考县| 石阡县| 桃园市| 高平市| 大丰市| 马鞍山市| 上饶市| 德钦县| 灵丘县| 英山县| 镇康县| 宝应县|