2017-06-15 89 views
1
.TXT文件在文件瀏覽器

用戶點擊獲取對話框的「打開方式...」並沒有列出我的應用程序。 當我嘗試打開文件時,我想獲取它的絕對路徑。我得到的是內容:// URI如何使用intent.action.VIEW打開文件時獲取文件URI?

I/ActivityManager: START u0 {act=android.intent.action.VIEW dat=content://com.android.providers.downloads.documents/document/1031 typ=text/plain

如果我想要檢索路徑,我的文件,我需要得到的file:// URI。我怎樣才能得到file:// URI而不是content://

這裏是AndroidManifest

 <intent-filter > 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" />  
      <data android:mimeType="text/*"/> 
     </intent-filter> 

這裏是我嘗試處理文件:

Intent i = getIntent(); 
String action = i.getAction(); 
String type = i.getType(); 

if (Intent.ACTION_VIEW.equals(action) && type != null) { 
    Uri uri = i.getData(); 
    if (uri != null) { 
     Toast.makeText(this, uri.toString(), Toast.LENGTH_SHORT).show(); 
    }     
} 

回答

1

這裏是AndroidManifest

<intent-filter>是說,你可以處理text/*內容不管它來自

當我嘗試打開文件,我想它的絕對路徑

然後你需要添加<data android:scheme="file"><intent-filter>,聲明自己只與file方案工作。您的應用程序將不再出現在應用程序的選項,不使用fileUri值,如「文件管理器」您正在使用。而且,由於fileUri值在Android 7.0+上被有效禁用,因此隨着時間的推移,您的應用將不再有用。到2020年左右,你的應用將無用武之地。

或者,你可以擺脫的「希望得到它的絕對路徑」的要求。如果你想要從一個filecontentUri文本內容,您可以在ContentResolver使用openInputStream(),例如。

+0

但我想不是隻讀文件,我也想編輯文件並保存。 –

+0

@PersonalJesus:在'ContentResolver'上也有'openOutputStream()'。督察,你會做一個絕對路徑和同樣的事情'FileInputStream' /'FileOutputStream'的東西,你可以用'content'做'Uri'和'openInputStream()'/'openOutputStream()'。 – CommonsWare

相關問題