Android之內(nèi)置和外置sdcard路徑顯示并且寫入數(shù)據(jù)的方法
更新時間:2018年08月01日 14:19:26 作者:chenyu_insist
今天小編就為大家分享一篇Android之內(nèi)置和外置sdcard路徑顯示并且寫入數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
1、效果圖片
2、部分代碼
package com.example.sdcardcheck; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Array; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.storage.StorageManager; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { public static String TAG = "SdCardCheck"; public TextView mTv; public Button mBtIn; public Button mBtout; public String result = ""; public String inSdcardPath = ""; public String outSdcaraPath = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTv = (TextView)findViewById(R.id.text); mBtIn = (Button)findViewById(R.id.button_in); mBtout = (Button)findViewById(R.id.button_out); // checkPerssiom(); mBtIn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // 獲取SD卡的目錄 saveDataToSdcard(inSdcardPath, "inSdcard_text.txt"); } }); mBtout.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { saveDataToSdcard(outSdcaraPath, "outSdcard_text.txt"); } }); checkSd(); getCommonPath(); getStoragePath(this, true); getStoragePath(this, false); getExternalStoreAvailableSize(); mTv.setText(result); } public void checkSd() { String state = Environment.getExternalStorageState(); result += "Environment.MEDIA_MOUNTED is:" + state.equals(Environment.MEDIA_MOUNTED) + "\n"; result += "Environment.MEDIA_MOUNTED_READ_ONLY is:" + state.equals(Environment.MEDIA_MOUNTED_READ_ONLY) + "\n"; result += "Environment.MEDIA_SHARED is:" + state.equals(Environment.MEDIA_SHARED) + "\n"; Log.d(TAG, "state.equals(Environment.MEDIA_MOUNTED is:" + state.equals(Environment.MEDIA_MOUNTED)); Log.d(TAG, "state.equals(Environment.MEDIA_MOUNTED_READ_ONLY is:" + state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)); Log.d(TAG, "state.equals(Environment.MEDIA_SHARED is:" + state.equals(Environment.MEDIA_SHARED)); } public String getStoragePath(Context mContext, boolean is_removale) { StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE); Class<?> storageVolumeClazz = null; try { storageVolumeClazz = Class.forName("android.os.storage.StorageVolume"); Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList"); Method getPath = storageVolumeClazz.getMethod("getPath"); Method isRemovable = storageVolumeClazz.getMethod("isRemovable"); Object resultObject = getVolumeList.invoke(mStorageManager); final int length = Array.getLength(resultObject); for (int i = 0; i < length; i++) { Object storageVolumeElement = Array.get(resultObject, i); String path = (String) getPath.invoke(storageVolumeElement); boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement); if (is_removale == removable) { if (is_removale) { result += "sdcard外部存儲路經(jīng)" + path + "\n"; outSdcaraPath = path; } else { result += "sdcard內(nèi)部存儲路經(jīng)" + path + "\n"; inSdcardPath = path; } return path; } } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return null; } public void showSdCard() { //String sdcardPath = System.getenv("EXTERNAL_STORAGE"); String sdcardPath = Environment.getExternalStorageDirectory().getAbsolutePath(); result += "sdcard內(nèi)部存儲路經(jīng)" + sdcardPath + "\n"; String extSdcardPaht = System.getenv("SECONDARY_STORAGE"); result += "sdcard外部存儲路經(jīng)" + extSdcardPaht + "\n"; } /** * 得到外部存儲可用的空間 * @return 剩余空間的大小,單位是Byte */ public long getExternalStoreAvailableSize(){ String state = Environment.getExternalStorageState(); if(state.equals(Environment.MEDIA_MOUNTED) || state.equals(Environment.MEDIA_SHARED)) { // 取得sdcard文件路徑 File pathFile = Environment.getExternalStorageDirectory(); android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath()); // 獲取SDCard上每個block的SIZE long nBlocSize = statfs.getBlockSize(); // 獲取可供程序使用的Block的數(shù)量 long nAvailaBlock = statfs.getAvailableBlocks(); // 計算 SDCard 剩余大小Byte long nSDFreeSize = nAvailaBlock * nBlocSize ; if (nSDFreeSize > 1024 * 1024 * 1024) { result += "外部存儲可用的空間:" + nSDFreeSize/(1024 * 1024 * 1024) + "G\n"; } else { result += "外部存儲可用的空間:" + nSDFreeSize + "Byte\n"; } return nSDFreeSize; } else { result += "size:" + "0" + "\n"; } return 0; } // public void checkPerssiom() { // if (Build.VERSION.SDK_INT >= 23) { // int REQUEST_CODE_CONTACT = 101; // String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE}; // //驗證是否許可權(quán)限 // for (String str : permissions) { // if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) { // //申請權(quán)限 // this.requestPermissions(permissions, REQUEST_CODE_CONTACT); // return; // } else { // Log.d(TAG, "this.checkSelfPermission(str) == PackageManager.PERMISSION_GRANTED"); // } // } // } // } public void getCommonPath() { File file = Environment.getExternalStorageDirectory(); String path = file.getAbsolutePath(); result += "sdcard存儲路經(jīng)" + path + "\n"; mTv.post(new Runnable(){ @Override public void run() { mTv.setText(result); } }); } public void saveDataToSdcard(String path, String fileName) { if ("".equals(path) || path == null) { result += "path is null or ''" + "\n"; mTv.post(new Runnable(){ @Override public void run() { mTv.setText(result); } }); return; } String str = "sangfor"; File sdDire = Environment.getExternalStorageDirectory(); FileOutputStream outFileStream; try { outFileStream = new FileOutputStream(path + File.separator + fileName); outFileStream.write(str.getBytes()); outFileStream.close(); Toast.makeText(MainActivity.this, fileName +"文件保存成功", Toast.LENGTH_LONG).show(); } catch (Exception e) { e.printStackTrace(); result += "save " + fileName +"fail" + "\n"; mTv.post(new Runnable(){ @Override public void run() { mTv.setText(result); } }); Log.e(TAG, "save file fail"); } } }
以上這篇Android之內(nèi)置和外置sdcard路徑顯示并且寫入數(shù)據(jù)的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android編程實現(xiàn)改變控件背景及形態(tài)的方法
這篇文章主要介紹了Android編程實現(xiàn)改變控件背景及形態(tài)的方法,涉及Android控件布局設(shè)置的相關(guān)技巧,需要的朋友可以參考下2016-02-02Android使用DocumentFile讀寫外置存儲的問題
大家好,本篇文章主要講的是Android使用DocumentFile讀寫外置存儲的問題,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2021-12-12為Android Studio編寫自定義Gradle插件的教程
這篇文章主要介紹了為Android Studio編寫自定義Gradle插件的教程,Android Studio現(xiàn)在基本上已經(jīng)成為了安卓開發(fā)的標配IDE,友可以參考下2016-02-02解決Android 沉浸式狀態(tài)欄和華為虛擬按鍵沖突問題
對于現(xiàn)在的 App 來說,布局頁面基本都會用到沉浸式狀態(tài)欄,單純的沉浸式狀態(tài)欄很容易解決,但是在華為手機上存在一個底部虛擬按鍵的問題,會導(dǎo)致頁面底部和頂部出現(xiàn)很大的問題,下面通過本文給大家分享Android 沉浸式狀態(tài)欄和華為虛擬按鍵沖突問題,一起看看吧2017-07-07Android中常用的三個Dialog彈窗總結(jié)解析
自己雖然一直使用過dialog,但是一直都是復(fù)制、粘貼;不清楚dialog的具體用途,這次趁著有時間,總結(jié)一下具體用法,感興趣的朋友跟著小編來看看吧2021-10-10