我在接收简单数据时阅读了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。但我想收到案文。
答案 0 :(得分:1)
1。是的,您需要为要共享的所有文件类型添加mimeType
。
2。我认为问题可能是起始Activity
也会有
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />.
在其舱单声明中。所以当你打电话时
intent.getAction()
返回哪个动作? ACTION_SEND
或MAIN
?我相信这是他们所谈论的问题。
3。如果您不希望自己的应用显示在共享应用列表中,那么为什么要添加操作
<action android:name="android.intent.action.SEND" />
首先在清单中的Activity
?因为,向intent-filter添加操作的目的恰恰是Activity
或Service
或BroadcastReceiver
可以通过发送隐含意图从其他应用启动} EM>。如果您不希望这种情况发生,那么您打算如何共享文本&#34;无论如何??