2016-03-02 73 views
0

我對Android比較陌生,我正在嘗試將文件資源管理器集成到我的應用程序中。我使用這個庫,通過Maven倉庫補充說:https://android-arsenal.com/details/1/2690爲什麼我的Android應用程序無法從存儲中讀取?

我已經包含在我的清單文件中READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE權限,但出於某種原因,我的應用程序讀取外部存儲的全部爲空目錄,併爲我的生活我無法弄清楚爲什麼!

當我使用其他應用程序(例如ES文件資源管理器),並導航到相同的目錄時,它甚至不是空的!該目錄不是空的,其他應用程序可以從中讀取,但不是我的,由於某種原因。

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="datashift.mat.datashiftnfc.MainActivity" 
    android:background="#ff0000"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:src="@drawable/dsheader"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Choose File" 
     android:id="@+id/browseButton" 
     android:layout_below="@+id/imageView" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="47dp" 
     android:onClick="openFilePicker"/> 
</RelativeLayout> 

MainActivity.java

package datashift.mat.datashiftnfc; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 

import com.nbsp.materialfilepicker.ui.FilePickerActivity; 

import java.io.File; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void openFilePicker(View v){ 
     Intent intent = new Intent(this, FilePickerActivity.class); 
     intent.putExtra(FilePickerActivity.ARG_SHOW_HIDDEN, true); 
     startActivityForResult(intent, 1); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == 1 && resultCode == RESULT_OK) { 
      String filePath = data.getStringExtra(FilePickerActivity.RESULT_FILE_PATH); 
      File file=new File(filePath); 
     } 
    } 
} 

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?> 
<manifest package="datashift.mat.datashiftnfc" 
      xmlns:android="http://schemas.android.com/apk/res/android"> 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="15"/> 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.NFC"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

回答

1

你是如何試圖讀取該文件?在這個示例代碼中,您只是簡單地創建了一個文件對象,但卻無所作爲。如果你想從文件中讀取,你需要一個輸入流:

FileInputStream fin = new FileInputStream(file); 
BufferedReader reader = new BufferedReader(new InputStreamReader(fis), 64 * 1024); 
StringBuilder sb = new StringBuilder(); 
String line = null; 
while ((line = reader.readLine()) != null) { 
    sb.append(line).append("\n"); 
} 
reader.close(); 

如果定位API 23,你要問的讀/寫權限的用戶訪問外部存儲。

+0

該庫打開文件資源管理器,該文件資源管理器應顯示目錄中的所有文件,文件對象是用戶從該資源管理器中選擇的文件,但資源管理器將外部存儲顯示爲空。 –

+0

我並不熟悉該庫,但可以嘗試使用標準Android意圖顯示文件選取器: 意圖intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(「file/*」); startActivityForResult(intent,PICKFILE_RESULT_CODE); – Francesc

+0

您有關於該主題的任何資源嗎?這就是我想要做的,但我不知道如何 –

相關問題