2013-10-10 3 views
7

Intent.createChooser 메서드를 사용하여 동작을 선택하는 방법이 있습니까? 예를 들어, 전자 메일로 보내려는 이미지가 있습니다 (선택 사항 인 경우). 그리고 두 번째 옵션에서 나는 (이 작업에 대해서는 복잡한 동작이 필요합니다 - 이미지를 서버에 업로드하고 다운로드 링크를 검색하여 sms에 붙여 넣으려고 붙여 넣으려고 sms을 보내고 싶습니다. 그것을 sms으로)Android. 사용자 지정 의도 선택기

어떤 제안을 내놓을 수 있습니까? 두 번째 작업을 수행하려면 어떻게해야합니까?

은 내가 이런 식으로 뭔가에 이미지와 함께 전자 메일을 보낼 수 있다고 생각 :

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 : 나는 깨달았다sms이 있다면, 내가 진정으로 필요한 것 즉, 사용자의 클릭을 차단하는 것입니다 의도 선택자에서 선택됨. 그래서 문제는 어떻게 성취 될 수 있는가?

+0

는 http://stackoverflow.com/a/15022153/909497 희망이 도움이됩니다. – ACengiz

+0

@ACengiz, 고맙습니다. 이메일을 보내는 데 어려움이 없습니다. 질문은 선택자에게 SMS와 전자 메일 모두를 보내는 방법입니다. 그들 사이의 차이점은 이미지 자체와 함께 전자 메일을 보내고 이미지에 대한 링크가있는 SMS를 보내려한다는 것입니다. – 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

이 응답은 선언되지 않은 변수를 참조합니다. '오후'는 무엇이며, 독자는 어떻게 작성합니까? 왜'AppAdapter'는 생성자에서'pm'을 필요로합니까? – wsgeorge

1

정확하게 내가 원하는 것처럼 성취 될 수없는 것처럼 보입니다.

가능한 방법은 packageManager 클래스의 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); 
       } 
관련 문제