2012-03-02 108 views
4

我正在製作一個能夠上傳單個或多個文件或文件夾的應用程序。意圖過濾器的定義如下:Android接收共享文本文件但不共享文本內容

<activity android:name=".UploadActivity" android:launchMode="singleTop" android:theme="@style/Theme.Sherlock"> 
     <intent-filter android:label="@string/upload_intent"> 
      <action android:name="android.intent.action.SEND" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <data android:mimeType="application/*" /> 
      <data android:mimeType="audio/*" /> 
      <data android:mimeType="image/*" /> 
      <data android:mimeType="media/*" /> 
      <data android:mimeType="multipart/*" /> 
      <data android:mimeType="text/*" /> 
      <data android:mimeType="video/*" /> 
     </intent-filter> 
     <intent-filter android:label="@string/upload_intent"> 
      <action android:name="android.intent.action.SEND_MULTIPLE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <data android:mimeType="*/*" /> 
     </intent-filter> 
    </activity> 

這對於Blackmoon文件資源管理器和Android 4.0.3圖庫非常有用。我的應用程序顯示在共享菜單中。但是,它也會在瀏覽器中顯示,當您長按URL並選擇共享頁面。

當我發送一個文本文件到我的應用程序,我得到這個:

getIntent().getAction() returns Intent.ACTION_SEND 
getIntent().getType() returns "text/plain" 
getIntent().getScheme() returns null 
getIntent().getExtras().getString(Intent.EXTRA_STREAM) returns the filename 

然而,從瀏覽器發送URL返回同樣的事情減去的Intent.EXTRA_STREAM。我可以在代碼中輕鬆檢測到這一點,並說「嗨,我無法上傳文本!」但我寧願改變意圖過濾器,以便它只在有EXTRA_STREAM時觸發。是否有可能這樣做?

(我嘗試使用安卓方案,但將不是一個文件和文本字符串區分被共享,因爲它們都是空...)

+0

我也希望只用EXTRA_STREAM來觸發。你解決了這個問題嗎? – 2016-07-21 07:57:58

+0

即時消息也感興趣。你是如何解決這個問題的? – user1506104 2016-11-04 20:28:04

回答

2

您有:

getIntent().getExtras().getString(Intent.EXTRA_STREAM) returns the filename 

AFAIK,Android永遠不會向您發送一個打開的文件或套接字到文件。只是簡單的舊文件的路徑,然後您處理:

File somefile = new File(filename); 

然後讀取它或寫入它或不是。

至於傳入的文本是EXTRA_TEXT或STREAM,只需測試兩者並適當地處理。希望這可以幫助。