从其他应用程序接收数据 - android

时间:2015-03-02 13:00:01

标签: java android android-intent intentfilter android-implicit-intent

我在接收简单数据时阅读了documentation。我想收到一个URL,即。来自其他应用的text / plain。

所以,我只声明了这个意图过滤器:

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

在我的 MainActivity.class:

void onCreate (Bundle savedInstanceState) {
    ...
 // Get intent, action and MIME type

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

        if (Intent.ACTION_SEND.equals(action) && type != null) {
            if ("text/plain".equals(type)) {
                handleSendText(intent); // Handle text being sent
            }
        }
}

我正在处理收到的文字:

void handleSendText(Intent intent) {
        String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
        if (sharedText != null) {
            // Update UI to reflect text being shared
            textBox.setText(sharedText);
        }
    }

但是,该文档认为我应该仔细处理其他类型的MIME类型。

1)但是,由于我只注册了普通/文本,我还需要更多的类型处理代码吗?

2)此外,引用文件:

  

请记住,如果此活动可以从系统的其他部分(例如启动器)启动,那么在检查意图时您需要考虑这一点。

MainActivity.java也由LAUNCHER启动。我该如何处理?

3)一旦用户从对话框中选择我的应用程序,它是否会在所有情况下打开该应用程序?我不需要打开我的应用程序。我可以绕过那个吗?

编辑:我不需要打开应用的UI。但我想收到案文。

enter image description here

1 个答案:

答案 0 :(得分:1)

1。是的,您需要为要共享的所有文件类型添加mimeType

2。我认为问题可能是起始Activity也会有

<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />. 

在其舱单声明中。所以当你打电话时

intent.getAction()

返回哪个动作? ACTION_SENDMAIN?我相信这是他们所谈论的问题。

3。如果您不希望自己的应用显示在共享应用列表中,那么为什么要添加操作

<action android:name="android.intent.action.SEND" />

首先在清单中的Activity?因为,向intent-filter添加操作的目的恰恰是ActivityServiceBroadcastReceiver可以通过发送隐含意图从其他应用启动。如果您不希望这种情况发生,那么您打算如何共享文本&#34;无论如何??