2017-02-20 47 views
0

好吧,我已经过了一段时间,我没有得到它。多个环节中的建议都没有解决问题。使用电子邮件意向

我已成功设置我的应用程序发送文件。目前,我正在尝试使用我的应用程序打开这些文件。

当我点击收到的电子邮件中的文件时,我的活动打开。

接下来我需要做的是将本地文件保存在我的应用程序使用的外部存储文件夹中。

所以,当你点击一个文件并且意图过滤器打开正确的活动时,你下一步要做什么访问该文件?

意图过滤器:

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

      <data android:mimeType="*/*" /> 
      <data android:pathPattern=".*\\.gmgt" /> 
     </intent-filter> 

活动:

public class ActFileReceiver extends Activity { 

private TextView label; 

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

    label = (TextView) findViewById(R.id.lblFileRecieverText); 


} 

}

意图用来发送文件:

public void emailFile(File file) { 
    Uri fileURI = Uri.fromFile(file); 
    Intent mailIntent = new Intent(android.content.Intent.ACTION_SEND); 
    mailIntent.setType("messsage/vnd.com.boardmonkey.TABLETop.gamefile"); 
    mailIntent.putExtra(Intent.EXTRA_SUBJECT, "TABLETop game file: " + file.getName()); 
    mailIntent.putExtra(Intent.EXTRA_STREAM, fileURI); 
    startActivity(Intent.createChooser(mailIntent, "Send Mail With...")); 
} 
+0

“我没有代码示例” - 当然可以。根据你的问题,你有一个活动,你有一个''。根据你的''是什么来做什么的细节('ACTION_VIEW'?'ACTION_SEND'?别的?)。所以,至少给我们一些。 – CommonsWare

+0

够公平的,不是那么深,我的不好。编辑以反映我实际上做了什么。 –

+0

action_sendto工作得很好,我的应用程序将成功通过设备上的任何可发送应用程序发送文件。 –

回答

0

您正在寻找支持ACTION_VIEW。如果您查看the documentation for ACTION_VIEW,您会发现:

输入:getData()是从中检索数据的URI。

在这里,“输入”指的是从您的姓名startActivity()发送给您的任何人的数据,其中包含用户选择的活动。并且,Intent行动文档中引用的方法参考Intent本身。

因此,呼吁getIntent()检索用于创建活动Intent,并呼吁getData()就可以得到一个Uri到您应该查看内容。


现在你开始遇到问题,但。具体来说,您正在尝试使用android:pathPattern。您的使用有两个问题:

  1. You cannot use android:pathPattern without also specifying android:scheme and android:host

  2. 这是2017年,几乎没有东西使用文件扩展名了。尤其是,大多数内容通过Uri值与content方案共享,并且contentUri不太可能具有文件扩展名。

使用android:pathPattern唯一的半有效的办法就是限制自己的file方案(通过android:scheme),然后用一个事实,即你的应用程序将随着时间的推移不断减少应用数量互通生活。

+0

好吧,这是我错过了!我的应用程序不需要与其他应用程序进行互操作,它是一套套件,只需要与自己共享文件,诸如文本或短信文档之类的输出文件将按照其自己的意图分别进行格式化,即如果文件的名称是通过Facebook分享名称将从文件中拉入字符串并作为文本发送。 所以,计划和主机:我的文件是从我的应用程序创建的对象序列化的文件,所以这意味着它只是计划:文件? 我会查找“主机”,但我认为这是文件的来源,如电子邮件或网络,对不对? –

+0

@JohnHaines:“我的应用程序不需要与其他应用程序互操作” - 是的,它的确如此。目前,您的应用正在宣传*任何*应用可以要求其查看内容。如果这不是你想要的,你将需要采取不同的方法。 – CommonsWare

+0

任何应用程序都可以查看这些文件。他们不能对他们做任何事情,因为他们是序列化的对象。如果有人想写一个解释该对象的应用程序,那就不会打扰我。我只想让我的应用程序在本地保存文件。 –

相关问题