Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android. Custom Intent chooser

I wonder, is there any way to choose behavior using Intent.createChooser method? For example, I have an image, which I would like send by e-mail, if it's chosen (first option). And on second option I'd like to send sms with the link on this image (For which I'll need complex actions - upload image to the sever, retrieve download link, which I'd like to be in the sms and paste it to the sms)

Could you possibly come up with any suggestion, what should I do to accomplish the second task?

I believe I can send an e-mail with image with something like this:

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
emailIntent.setType("application/image");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{textMail}); 
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"Some Subj"); 
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Some Extra Text"); 
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(fileUri));
startActivity(Intent.createChooser(emailIntent, "Send mail..."));

UPD: I realized, that what I truly needed is to intercept the user click, if the sms was chosen in intent chooser. So, the question is how it might be accomplished?

like image 654
xvar Avatar asked Oct 10 '13 14:10

xvar


1 Answers

1)Create Intent to perform share or send operation,

Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
email.putExtra(Intent.EXTRA_SUBJECT, "Hi");
email.putExtra(Intent.EXTRA_TEXT, "Hi,This is Test");

email.setType("text/plain");

2)Create AlertDialog to set the Application in the alertdialog,

final Dialog dialog = new Dialog(Custom_chooser.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
WindowManager.LayoutParams WMLP = dialog.getWindow().getAttributes();
WMLP.gravity = Gravity.CENTER;
dialog.getWindow().setAttributes(WMLP);
dialog.getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setCanceledOnTouchOutside(true);
dialog.setContentView(R.layout.about_dialog);
dialog.show();

3)Get the list of application related to the particular intent using the ResolveInfo

List<ResolveInfo> launchables=pm.queryIntentActivities(email, 0);
Collections.sort(launchables,newResolveInfo.DisplayNameComparator(pm));

4))Set the list of application to the custom listview.

adapter=new AppAdapter(pm, launchables);
lv.setAdapter(adapter);

5)Finally,lanch the particular application when choose the application from the list of application in listview,

ResolveInfo launchable=adapter.getItem(position);
ActivityInfo activity=launchable.activityInfo;
ComponentName name=new ComponentName(activity.applicationInfo.packageName,
activity.name);
email.addCategory(Intent.CATEGORY_LAUNCHER);
email.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
email.setComponent(name);
startActivity(email);

For more refer this link:http://velmuruganandroidcoding.blogspot.in/2014/01/custom-chooser-android-in-example.html

like image 117
user3921740 Avatar answered Oct 23 '22 13:10

user3921740