亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2018年08月02日 08:42:09   作者:Vincent__Lee  
今天小編就為大家分享一篇android 6.0 寫入SD卡的權(quán)限申請(qǐng)實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

6.0的手機(jī)對(duì)于寫入手機(jī)需要申請(qǐng)權(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;//申請(qǐng)權(quán)限的請(qǐng)求碼
 @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、申請(qǐng)權(quán)限: 參數(shù)二:權(quán)限的數(shù)組;參數(shù)三:請(qǐng)求碼
      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){
      //第一請(qǐng)求權(quán)限被取消顯示的判斷,一般可以不寫
      if (ActivityCompat.shouldShowRequestPermissionRationale(SdkActivity.this,
        Manifest.permission.WRITE_EXTERNAL_STORAGE)){
       Log.i("readTosdCard","我們需要這個(gè)權(quán)限給你提供存儲(chǔ)服務(wù)");
       showAlert();
      }else {
       //2、申請(qǐng)權(quán)限: 參數(shù)二:權(quán)限的數(shù)組;參數(shù)三:請(qǐng)求碼
       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ù)組 申請(qǐng)授權(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)行申請(qǐng)權(quán)限的處理 利用申請(qǐng)權(quán)限的回調(diào)機(jī)制直接在權(quán)限申請(qǐng)下來之后調(diào)用寫入處理

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

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

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

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

相關(guān)文章

  • AccessibilityService實(shí)現(xiàn)微信發(fā)紅包功能

    AccessibilityService實(shí)現(xiàn)微信發(fā)紅包功能

    這篇文章主要為大家詳細(xì)介紹了AccessibilityService實(shí)現(xiàn)微信發(fā)紅包功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Android 使用Zbar實(shí)現(xiàn)掃一掃功能

    Android 使用Zbar實(shí)現(xiàn)掃一掃功能

    這篇文章主要介紹了Android 使用Zbar實(shí)現(xiàn)掃一掃功能,本文用的是Zbar實(shí)現(xiàn)掃一掃,因?yàn)楦鶕?jù)本人對(duì)兩個(gè)庫(kù)的使用比較,發(fā)現(xiàn)Zbar解碼比Zxing速度要快,實(shí)現(xiàn)方式也簡(jiǎn)單,需要的朋友可以參考下
    2023-03-03
  • Android實(shí)現(xiàn)二級(jí)列表購(gòu)物車功能

    Android實(shí)現(xiàn)二級(jí)列表購(gòu)物車功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)二級(jí)列表購(gòu)物車功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android實(shí)現(xiàn)自定義Crash handler記錄崩潰信息實(shí)例代碼

    Android實(shí)現(xiàn)自定義Crash handler記錄崩潰信息實(shí)例代碼

    這篇文章主要給大家介紹了Android實(shí)現(xiàn)自定義Crash handler記錄崩潰信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • Android banner詳解用法案例

    Android banner詳解用法案例

    android-banner實(shí)現(xiàn)了一般banner循環(huán)輪播的效果,一頁只顯示一張圖片,也可以一頁顯示一張圖和相鄰兩個(gè)圖片的一部分,此項(xiàng)目?jī)H僅是banner展示圖片,沒有多余的諸如指示器、頁面切換動(dòng)畫等效果代碼,詳見效果圖和案例代碼
    2021-11-11
  • Android 出現(xiàn)問題 Gradle

    Android 出現(xiàn)問題 Gradle

    這篇文章主要介紹了Android 出現(xiàn)問題 Gradle "xxx" project refresh failed解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Android中實(shí)現(xiàn)可滑動(dòng)的Tab的3種方式

    Android中實(shí)現(xiàn)可滑動(dòng)的Tab的3種方式

    這篇文章主要介紹了Android中實(shí)現(xiàn)可滑動(dòng)的Tab的3種方式,需要的朋友可以參考下
    2014-02-02
  • 微信第三方登錄Android實(shí)現(xiàn)代碼

    微信第三方登錄Android實(shí)現(xiàn)代碼

    本篇文章主要介紹了微信第三方登錄Android實(shí)現(xiàn)代碼,可以通過微信登陸到第三方應(yīng)用,有需要的可以了解一下。
    2016-11-11
  • android教程使用webview訪問https的url處理sslerror示例

    android教程使用webview訪問https的url處理sslerror示例

    這篇文章主要介紹了android教程使用webview訪問https的url處理sslerror示例,大家參考使用吧
    2014-01-01
  • Android自定義ViewPager指示器

    Android自定義ViewPager指示器

    這篇文章主要為大家詳細(xì)介紹了Android自定義ViewPager指示器的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評(píng)論