最近寫了一個讀書android sdcard的程式使用的Environment類的靜態方法得到得sdcard路徑,剛開始的時候沒有讀取成功,並提示許可權異常,明明我已經在AndroidManifest.xml檔案中加了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />許可權,還是報這個異常,後來經過仔細尋找資料才知道,原來還少了個許可權<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />,加上這個許可權後就能正確讀取sdcard的內容了。
下面是我的AndroidManifest.xml檔案
<?xml version="1.0" encoding="utf-8"?><br /><manifest xmlns:android="http://schemas.android.com/apk/res/android"<br />package="com.yzq.sdcarlist" android:versionCode="1"<br />android:versionName="1.0"></p><p><application android:icon="@drawable/icon" android:label="@string/app_name"><br /><activity android:name="SdCardListActivity" android:theme="@android:style/Theme.NoTitleBar"><br /><intent-filter><br /><action android:name="android.intent.action.MAIN" /><br /><category android:name="android.intent.category.LAUNCHER" /><br /></intent-filter><br /></activity><br /></application></p><p><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><br /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><br /></manifest>
這是JAVA源碼
public void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.main);<br />sdcard_File_List = (ListView) findViewById(R.id.sdcard_file_list);<br />SimpleAdapter adapter = new SimpleAdapter(this, data,<br />android.R.layout.simple_list_item_2, new String[] { "fileName",<br />"filePath" }, new int[] { android.R.id.text1,<br />android.R.id.text2 });<br />sdcard_File_List.setAdapter(adapter);<br />sdcard_File_List<br />.setOnScrollListener(new AbsListView.OnScrollListener() {</p><p>@Override<br />public void onScrollStateChanged(AbsListView view,<br />int scrollState) {<br />if (scrollState == SCROLL_STATE_IDLE) {</p><p>}<br />}</p><p>@Override<br />public void onScroll(AbsListView view,<br />int firstVisibleItem, int visibleItemCount,<br />int totalItemCount) {</p><p>}<br />});<br />readFile();<br />}</p><p>private void readFile() {<br />File file = Environment.getExternalStorageDirectory();<br />File[] files = file.listFiles();<br />readFile(files);<br />}</p><p>private void readFile(File[] files) {<br />if (files != null && files.length > 0) {<br />for (int i = 0; i < files.length; i++) {<br />if (files[i].isDirectory()) {<br />readFile(files[i].listFiles());<br />} else {<br />parseFile(files[i]);<br />}<br />if (i == files.length - 1) {<br />}<br />}<br />}</p><p>}</p><p>private void parseFile(File file) {<br />String fileName = file.getName();<br />String filePath = file.getPath();<br />Map<String, String> map = new HashMap<String, String>();<br />map.put("fileName", fileName);<br />map.put("filePath", filePath);<br />data.add(map);<br />}
我是採用Environment類的靜態方法得到sdcard得路徑,然後採用遞迴的方式讀出目錄下面的所有檔案.