2012-03-02 72 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,只需测试两者并适当地处理。希望这可以帮助。