2012-05-02 3 views
4

전자 메일을 보내는 응용 프로그램을 개발했습니다. 전자 메일 단추를 클릭하면 전화에 설치된 전자 메일 클라이언트 중 하나를 선택해야합니다. 하지만, 제 경우에는 추가로 블루투스 옵션이 필요하지 않습니다. 나는 많은 것을 검색했지만 어떤 해결책도 찾을 수 없었다. 아래 코드를 게시하고 있습니다.블루투스 옵션이 선택 목록에 있습니다.

public class EtestActivity extends Activity { 
/** Called when the activity is first created. */ 
Button email; 
Intent in; 
private static final String TAG = "EmailLauncherActivity"; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    email = (Button)findViewById(R.id.email); 
    email.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      try { 
       in = new Intent(Intent.ACTION_SEND); 
       in.setType("image/jpg"); 
       in.setType("plain/text"); 
       in.setType("application/octet-stream"); 
       in.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]","[email protected]"}); 
       in.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/android.jpg")); 
       startActivity(Intent.createChooser(in, "mailto:")); 
      } catch (Exception e) { 
       Log.e(TAG, "email sending failed", e); 
      }//catch 
     }//onClick 
    }); 
}//onCreate 

} // 클래스

+0

왜 setType()을 여러 번 호출하고 있습니까? –

+0

in.setType ("image/jpg")을 삭제했습니다. 및 in.setType ("plain/text"); 하지만 setType ("application/octet-stream")을 사용하지 않으면 블루투스, Gmail, 페이스 북, 트위터, 메시징 등의 목록에있는 모든 응용 프로그램이 표시됩니다. 내 요구 사항은 전자 메일 클라이언트의 목록 일뿐입니다. 다른 MIME 형식을 설정해야합니까? – Nitish

답변

1

전자 메일을 보내기위한 코드입니다. PackageManager (http://developer.android.com/reference/android/content/pm/PackageManager.html)를 사용하면 다른 선택을 피할 수 있습니다.

private void sendEpost(String type) { 
boolean found = false; 
Intent in = new Intent(android.content.Intent.ACTION_SEND); 
in.setType("image/jpeg"); 
in.setType("application/octet-stream"); 
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(in, 0); 
if (!resInfo.isEmpty()){ 
    for (ResolveInfo info : resInfo) { 
     if (info.activityInfo.packageName.toLowerCase().contains(type) || 
       info.activityInfo.name.toLowerCase().contains(type)) { 
      in.putExtra(Intent.EXTRA_EMAIL, new String[]{}); 
      in.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
      in.putExtra(Intent.EXTRA_TEXT,  "your text"); 
      in.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(Environment.getExternalStorageDirectory() 
        .getAbsolutePath().toString()+"/diplomat/"+adapter.readName(touches)))); 
      in.setPackage(info.activityInfo.packageName); 
      found = true; 
      break; 
     } 
    } 
    if (!found) 
     return; 
    startActivity(Intent.createChooser(in, "Select")); 
} 
}//sendEpost 
+0

+1 멋진 일 .. !! – MKJParekh

2

ACTION_SEND 대신 ACTION_SENDTO를 사용해보십시오. 이렇게하면 문제가 해결 될 수 있습니다.
Here is the API.
언제든지 PackageManagerqueryIntentActivities()을 사용할 수 있으며 나만의 맞춤 대화 상자를 표시 할 수 있습니다.

+0

ACTION_SENDTO를 사용하면 첨부 파일을 지원하지 않습니다. – Nitish

0

당신은이 문제를 해결하기 위해이 옵션을

먼저

는 의도 setType("message/rfc822"); Reffer this의 당신의 유형을 변경하는 것입니다 수 있습니다.

두 번째는 행동 유형을 변경하십시오. Intent.ACTION_SENDTO Reffer this.

+0

귀하의 제안에 따라 두 옵션을 모두 시도했습니다. 1st 사용 : 여전히 선택기 목록에 블루투스가 표시됩니다. 둘째로 : 블루투스 옵션이 더 이상 나타나지 않지만 첨부 파일을 보내야하므로 첨부 파일이 아닙니다. 광산 파일은 jpeg 이미지입니다. – Nitish

+0

시도했으나 작동하지 않았습니다. 내가 이전에 언급 한 것과 같은 문제에 여전히 직면 해있다. 이 목적으로 패키지 관리자를 사용하는 방법을 알려주시겠습니까? – Nitish

+0

예, 나는 이미 그것을 시도했다. 이 경우 블루투스 옵션도 나타납니다. – Nitish

관련 문제