Reputation: 1226
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
I am looking to share text. Can someone point me in the right direction? Is this done with intents?
Upvotes: 62
Views: 44458
Reputation: 1129
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
}
}
}
Upvotes: 0
Reputation: 39052
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.fromFile(new File(filePath));
instead of
Uri.parse(filePath)
Just in case anyone is having the same issue.
Upvotes: 7
Reputation: 77752
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.
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.
Upvotes: 4
Reputation: 1796
This is indeed done with Intents.
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"));
Upvotes: 120