2013-10-10 20 views
7

Acaba, Intent.createChooser yöntemini kullanarak davranışı seçmenin herhangi bir yolu var mı? Örneğin, seçtiyseniz (ilk seçenek) e-posta ile göndermek istediğim bir resmim var. Ve ikinci seçenekte sms bu görüntüdeki bağlantıyı kullanarak göndermek istiyorum (Hangi karmaşık eylemlere ihtiyacım var - görüntüyü cehenneme yükle, sms içinde olmak istediğim indirme bağlantısını al ve yapıştır sms)Android. Özel Amaç Seçici

Herhangi bir öneride bulunabilir misiniz, ikinci görevi yerine getirmek için ne yapmalıyım?

ben böyle bir şey ile görüntü ile e-posta gönderebilirsiniz inanıyoruz:

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: anladımsms olsaydı, gerçekten gerekli olduğunu, kullanıcı tıklamayı müdahale etmektir niyet seçicide seçildi. Yani, soru nasıl başarılabilir?

+0

http://stackoverflow.com/a/15022153/909497 Umarım bu yardımcı olur. – ACengiz

+0

@ACengiz, teşekkürler, ama e-posta göndermede zorluk çekmiyorum. Soru, Chooser'ın hem sms hem de e-posta için nasıl edinileceğidir. Aralarındaki fark, imgenin kendisiyle ve sms ile e-postayı resme olan bağlantı ile göndermek istiyorum. – xvar

cevap

10

1) payını gerçekleştirmek veya işlemi göndermek için Niyet oluşturma

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 içinde Uygulamayı ayarlamak için AlertDialog oluşturma

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)); 
kullanarak belirli bir amaç ile ilgili uygulamanın listesini alın.

4)) Uygulama listesini özel liste görünümüne ayarlayın. http://velmuruganandroidcoding.blogspot.in/2014/01/custom-chooser-android-in-example.html

+1

Bu yanıt bildirilmemiş değişkenleri başvuruyor. Ne var, okuyucu nasıl yaratıyor? Neden AppAdapter'in yapıcısında 'pm' olması gerekiyor? – wsgeorge

1

Bana öyle geliyor ki, istediğim gibi tamamlanamaz.

Olası yol, PackageManager sınıfında queryIntentActivities() kullanarak özel uygulama seçici oluşturmaktır. Faydalı mesaj: - http://developer.android.com/guide/topics/ui/menus.html#PopupMenu
veya kayan bağlam menüsü -
http://developer.android.com/guide/topics/ui/menus.html#FloatingContextMenu

Aslında ne istediğini müşteri sadece bazı özel Dialog olduğunu ortaya çıktı Custom filtering of intent chooser based on installed Android package name

Bir diğer olası yolu açılır özel oluşturmaktır. Böyle bir şey:

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

Ayrıca the selected answer için: liste görünümü uygulama listesinden uygulamayı seçtiğinizde

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

5) Son olarak,

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

daha bu bağlantıyı bakın

özel uygulama lanch. Facebook'tan paylaşanı ile iyi çalışmaz olarak
Ayrıca, Facebook için bir denetim ekleyebilirsiniz:

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