android 6.0 寫入SD卡的權限申請實例講解
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;//申請權限的請求碼
@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、申請權限: 參數(shù)二:權限的數(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以上的手機 不是就不用
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、申請權限: 參數(shù)二:權限的數(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();
}
//判斷授權的方法 授權成功直接調用寫入方法 這是監(jiān)聽的回調
//參數(shù) 上下文 授權結果的數(shù)組 申請授權的數(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();
}
}
}
其實就是判斷是不是6.0的手機再進行申請權限的處理 利用申請權限的回調機制直接在權限申請下來之后調用寫入處理
注釋很清楚 你們看看代碼就好了( ⊙ o ⊙ )!
另外需要注意的一點我們也處理了第一次用戶拒絕權限,第二次需要請求時,給用戶提示權限作用
//第一請求權限被取消顯示的判斷,一般可以不寫
if (ActivityCompat.shouldShowRequestPermissionRationale(SdkActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)){
Log.i("readTosdCard","我們需要這個權限給你提供存儲服務");
showAlert();
}else {
//2、申請權限: 參數(shù)二:權限的數(shù)組;參數(shù)三:請求碼
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE);
}
以上這篇android 6.0 寫入SD卡的權限申請實例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Android編程錄音工具類RecorderUtil定義與用法示例
這篇文章主要介紹了Android編程錄音工具類RecorderUtil定義與用法,結合實例形式分析了Android錄音工具類實現(xiàn)開始錄音、停止錄音、取消錄音、獲取錄音信息等相關操作技巧,需要的朋友可以參考下2018-01-01
Android優(yōu)化方案之Fragment的懶加載實現(xiàn)代碼
本篇文章主要介紹了Android優(yōu)化方案之Fragment的懶加載實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
Android 創(chuàng)建依賴庫的方法(保姆級教程)
這篇文章主要介紹了Android 創(chuàng)建依賴庫的方法(保姆級教程),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Android編程實現(xiàn)可滑動的開關效果(附demo源碼下載)
這篇文章主要介紹了Android編程實現(xiàn)可滑動的開關效果,涉及Android的布局與控件設置技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2016-04-04
一文詳解Jetpack?Android新一代導航管理Navigation
這篇文章主要為大家介紹了Jetpack?Android新一代導航管理Navigation詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
Android RecyclerView上拉加載和下拉刷新(基礎版)
這篇文章主要為大家詳細介紹了Android RecyclerView上拉加載和下拉刷新的相實現(xiàn)方法,內容簡單,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02
Android 數(shù)據(jù)庫SQLite 寫入SD卡的方法
如果手機沒有root,數(shù)據(jù)庫文件是無法查看到的,不方便調試。最好的辦法是把數(shù)據(jù)庫寫進SD卡。通過本文給大家介紹Android 數(shù)據(jù)庫SQLite 寫入SD卡的方法,需要的朋友參考下吧2016-04-04
Android studio 2020中的Android SDK 下載教程
這篇文章主要介紹了Android studio 2020中的Android SDK 下載教程,本文圖文并茂給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
Android實現(xiàn)長按圓環(huán)動畫View效果的思路代碼
這篇文章主要介紹了Android實現(xiàn)長按圓環(huán)動畫View效果,本文給大家分享實現(xiàn)思路,通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09

