Android 通过对话框共享
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3553017/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Android Share Via Dialog
提问by Realn0whereman
I've seen the "share via" dialogs that are in apps like TFLN (texts from last night). Looks like this: share dialog http://garr.me/wp-content/uploads/2009/12/sharevia.jpg
我已经看到了 TFLN 等应用程序中的“共享通过”对话框(昨晚的文本)。看起来像这样:共享对话框 http://garr.me/wp-content/uploads/2009/12/sharevia.jpg
I am looking to share text. Can someone point me in the right direction? Is this done with intents?
我正在寻找共享文本。有人可以指出我正确的方向吗?这是用意图完成的吗?
回答by Ehxor
This is indeed done with Intents.
这确实是通过 Intent 完成的。
For sharing an image, like in the example picture, it would be something like this:
对于共享图像,如示例图片中所示,它会是这样的:
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");
share.putExtra(Intent.EXTRA_STREAM,
Uri.parse("file:///sdcard/DCIM/Camera/myPic.jpg"));
startActivity(Intent.createChooser(share, "Share Image"));
For text you would use something like:
对于文本,您将使用以下内容:
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.putExtra(Intent.EXTRA_TEXT, "I'm being sent!!");
startActivity(Intent.createChooser(share, "Share Text"));
回答by DiscDev
I was having issues with the accepted answer. What worked for me was creating a file from the path, then parsing the URI of the file, like:
我对接受的答案有疑问。对我有用的是从路径创建一个文件,然后解析文件的 URI,例如:
Uri.fromFile(new File(filePath));
instead of
代替
Uri.parse(filePath)
Just in case anyone is having the same issue.
以防万一有人遇到同样的问题。
回答by EboMike
Yes. You need to provide an Activity with an intent filter that can handle objects of the MIME Type image/jpeg (say, if you wanted to support sharing JPEG images), and and action of presumably ACTION_SEND.
是的。您需要为 Activity 提供一个意图过滤器,该过滤器可以处理 MIME 类型图像/jpeg 的对象(例如,如果您想支持共享 JPEG 图像)以及可能是 ACTION_SEND 的操作。
Many of the built-in Android apps are open-source, you can check the manifest file of the Messaging app to see what intent filters it is using.
许多内置的 Android 应用程序都是开源的,您可以检查消息应用程序的清单文件以查看它使用的意图过滤器。
回答by Velayutham M
Refer : Receiving simple data from other apps
Update your manifest
更新您的清单
<activity android:name=".ui.MyActivity" >
//To receive single image
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
//To receive multiple images
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
Handle the incoming content
处理传入的内容
public class MyActivity extends AppCompactActivity {
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 (type.startsWith("image/")) {
handleSendImage(intent); // Handle single image being sent
}
} else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
if (type.startsWith("image/")) {
handleSendMultipleImages(intent); // Handle multiple images being sent
}
}
}
void handleSendImage(Intent intent) {
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
// Update UI to reflect image being shared
}
}
void handleSendMultipleImages(Intent intent) {
ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
if (imageUris != null) {
// Update UI to reflect multiple images being shared
}
}
}