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外部存儲(chǔ)路經(jīng)" + path + "\n";
outSdcaraPath = path;
} else {
result += "sdcard內(nèi)部存儲(chǔ)路經(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)部存儲(chǔ)路經(jīng)" + sdcardPath + "\n";
String extSdcardPaht = System.getenv("SECONDARY_STORAGE");
result += "sdcard外部存儲(chǔ)路經(jīng)" + extSdcardPaht + "\n";
}
/**
* 得到外部存儲(chǔ)可用的空間
* @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上每個(gè)block的SIZE
long nBlocSize = statfs.getBlockSize();
// 獲取可供程序使用的Block的數(shù)量
long nAvailaBlock = statfs.getAvailableBlocks();
// 計(jì)算 SDCard 剩余大小Byte
long nSDFreeSize = nAvailaBlock * nBlocSize ;
if (nSDFreeSize > 1024 * 1024 * 1024) {
result += "外部存儲(chǔ)可用的空間:" + nSDFreeSize/(1024 * 1024 * 1024) + "G\n";
} else {
result += "外部存儲(chǔ)可用的空間:" + 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};
// //驗(yàn)證是否許可權(quán)限
// for (String str : permissions) {
// if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
// //申請(qǐng)權(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存儲(chǔ)路經(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ù)的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android自定義ListView實(shí)現(xiàn)下拉刷新
這篇文章主要為大家詳細(xì)介紹了Android自定義ListView實(shí)現(xiàn)下拉刷新的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07
Android GridView實(shí)現(xiàn)橫向列表水平滾動(dòng)
這篇文章主要為大家詳細(xì)介紹了Android GridView實(shí)現(xiàn)橫向列表水平滾動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Android實(shí)現(xiàn)圖片異步加載及本地緩存
這篇文章主要介紹了Android實(shí)現(xiàn)圖片異步加載及本地緩存的相關(guān)資料,需要的朋友可以參考下2016-02-02
Android判斷當(dāng)前App是在前臺(tái)還是在后臺(tái)
這篇文章主要為大家詳細(xì)介紹了Android判斷當(dāng)前App是在前臺(tái)還是在后臺(tái)的方法,感興趣的小伙伴們可以參考一下2016-08-08
代碼從windows下visual studio到andriod平臺(tái)遷移實(shí)現(xiàn)步驟
這篇文章主要介紹了代碼從windows下visual studio到andriod平臺(tái)遷移的修改記錄的相關(guān)資料,需要的朋友可以參考下2017-01-01
Android項(xiàng)目開發(fā) 教你實(shí)現(xiàn)Periscope點(diǎn)贊效果
這篇文章主要為大家分享了Android項(xiàng)目開發(fā),一步一步教你實(shí)現(xiàn)Periscope點(diǎn)贊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12
Android自定義View簡(jiǎn)易折線圖控件(二)
這篇文章主要為大家詳細(xì)介紹了Android自定義View簡(jiǎn)易折線圖控件的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Android編程連接MongoDB及增刪改查等基本操作示例
這篇文章主要介紹了Android編程連接MongoDB及增刪改查等基本操作,簡(jiǎn)單介紹了MongoDB功能、概念、使用方法及Android操作MongoDB數(shù)據(jù)庫(kù)的基本技巧,需要的朋友可以參考下2017-07-07

