2013-10-10 7 views
7

मुझे आश्चर्य है, Intent.createChooser विधि का उपयोग कर व्यवहार चुनने का कोई तरीका है? उदाहरण के लिए, मेरे पास एक छवि है, जिसे मैं ई-मेल द्वारा भेजना चाहता हूं, अगर इसे चुना गया है (पहला विकल्प)। और दूसरे विकल्प पर मैं इस छवि पर लिंक के साथ भेजना चाहता हूं (जिसके लिए मुझे जटिल कार्रवाइयों की आवश्यकता होगी - सेवर पर छवि अपलोड करें, डाउनलोड लिंक पुनर्प्राप्त करें, जिसे मैं sms में पेस्ट करना चाहता हूं और पेस्ट करना चाहता हूं यह sms)एंड्रॉइड। कस्टम इरादा चयनकर्ता

क्या आप संभवतः किसी भी सुझाव के साथ आ सकते हैं, मुझे दूसरा कार्य पूरा करने के लिए क्या करना चाहिए?

मेरा मानना ​​है कि मैं कुछ इस तरह से छवि के साथ एक ई-मेल भेज सकते हैं:

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...")); 

युपीडी: मुझे एहसास हुआ, कि क्या मैं वास्तव में जरूरत है, जो उपयोगकर्ता द्वारा क्लिक रोकना है अगर sms था इरादा चयनकर्ता में चुना गया। तो, सवाल यह है कि यह कैसे पूरा किया जा सकता है?

+0

http://stackoverflow.com/a/15022153/909497 आशा है कि इस मदद करता है। – ACengiz

+0

@ACengiz, धन्यवाद, लेकिन मुझे ई-मेल भेजने में कोई कठिनाई नहीं है। प्रश्न यह है कि दोनों एसएमएस और ई-मेल के लिए Chooser कैसे प्राप्त करें। उनके बीच का अंतर यह है कि मैं छवि के साथ ई-मेल भेजना चाहता हूं और छवि के लिंक के साथ एसएमएस भेजना चाहता हूं। – xvar

उत्तर

10

1) शेयर करते हैं या आपरेशन भेजने के लिए आशय बनाएँ,

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) alertdialog में आवेदन स्थापित करने के लिए 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) ResolveInfo

List<ResolveInfo> launchables=pm.queryIntentActivities(email, 0); 
Collections.sort(launchables,newResolveInfo.DisplayNameComparator(pm)); 
का उपयोग करके विशेष इरादे से संबंधित आवेदन की सूची प्राप्त करें

4)) कस्टम सूचीदृश्य में एप्लिकेशन की सूची सेट करें। http://velmuruganandroidcoding.blogspot.in/2014/01/custom-chooser-android-in-example.html

+1

यह उत्तर संदर्भ वेरिएबल्स जिन्हें घोषित नहीं किया गया है। 'Pm' क्या है, और पाठक इसे कैसे बनाता है? 'AppAdapter' को अपने कन्स्ट्रक्टर में' pm' क्यों चाहिए? – wsgeorge

1

ऐसा लगता है कि यह ठीक वैसे ही पूरा नहीं किया जा सकता है जैसा मैं चाहता था।

पैकेज मैनेजर वर्ग में queryIntentActivities() का उपयोग कर कस्टम ऐप चयनकर्ता बनाने का संभावित तरीका है। सहायक पद: - http://developer.android.com/guide/topics/ui/menus.html#PopupMenu
या अस्थायी संदर्भ मेनू -
http://developer.android.com/guide/topics/ui/menus.html#FloatingContextMenu

यह है कि केवल कुछ कस्टम Dialog था क्या ग्राहक वास्तव में चाहता था दिखाई दिया Custom filtering of intent chooser based on installed Android package name

एक अन्य संभावित रास्ता कस्टम बनाने के लिए पॉप-अप है। कुछ इस तरह:

public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("E-mail/MMS").setItems(R.array.send_array, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      // The 'which' argument contains the index position 
      // of the selected item 
     } 
    }); 
    return builder.create(); 
} 
0

इसके अलावा the selected answer रहे हैं:

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

5) अंत में, विशेष आवेदन जब सूचीदृश्य में आवेदन की सूची से आवेदन चुनते हैं,

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); 

अधिक इस लिंक देखें lanch।
आप भी फेसबुक के लिए एक नियंत्रण जोड़ सकता है फेसबुक हिस्सेदार के साथ अच्छी तरह से काम नहीं करता है के रूप में:

if (activity.applicationInfo.packageName.toLowerCase().contains("facebook")) { 
        //Share on Facebook 
        ShareLinkContent content = new ShareLinkContent.Builder(). 
          setContentUrl(Uri.parse(mLink)). 
          setImageUrl(Uri.parse(mImageURL)). 
            setContentTitle(mTitle). 
            setContentDescription(mDescription) 
          .build(); 
        com.facebook.share.widget.ShareDialog.show(mActivity, content); 
       } else { 
        //Share on selected application 
        ComponentName name = new ComponentName(activity.applicationInfo.packageName, 
          activity.name); 
        shareIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
          Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
        shareIntent.setComponent(name); 
        mActivity.startActivity(shareIntent); 
       } 
संबंधित मुद्दे