2011-04-26 5 views
2

다음 코드를 사용하고 있습니다. 장치에서이 코드를 실행할 때 문제가 발생합니다. 그것은 메일을 보내는 데 필요한 3 가지 옵션 인 Dailogbox를 엽니 다. "POP, 전자 메일, Gmail"등 작곡가가 나타나는 gamil을 클릭하십시오. 나는 Gamil 메일 작곡가를 직접 보여주고 싶다. 옵션을 선택하는 데일 로그 상자가 표시되는 대신. 도와주세요.Gmail 메일 작성기를 Android에서 직접 열려면 어떻게해야하나요?

Intent emailIntent = new Intent(Intent.ACTION_SEND); 
emailIntent.setType("text/html"); 

String subject = "My Subject"; 

emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); 

emailIntent.setType("text/html"); 

String title = "<p align='center'>" + storyTitle + "<br/>" + storyPubDate + "</p>"; 

String data = "<p> Sent From ABC APP Sent from my Android </p>"; 

      emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml(title + data)); 
startActivity(Intent.createChooser(emailIntent, "Email:")); 

답변

0

이 팝업을 프로그래밍 방식으로 무시할 수 없습니다. 사용자가 기능에 액세스하려고 시도하고 Gmail을 구성하지 않은 경우 어떻게됩니까?

이메일을 보내거나받을 수있는 유일한 Gmail 사용자가되도록 다른 모든 이메일 클라이언트를 제거하면됩니다. 그렇게하면 팝업이 나타나지 않습니다.

+0

예, Gmail이 구성되어 있지 않으면 안됩니다. 하지만 내 장치에서 다른 모든 클라이언트를 제거하려면 어떻게해야합니까? – Arslan

5

선택기가 필요하지 않은지 확실하지 않습니다. 이 시도 당신이 당신의 안드로이드 장치에 여러 메일 작곡가가 있고 당신의 요청에 Gamil 작곡가의 시작을 원하는 경우에이

  final Intent intent = new Intent(Intent.ACTION_SEND); 
      intent.setType("plain/text"); 
      intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"}); 
      intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
      intent.putExtra(Intent.EXTRA_TEXT, content); 
      activity.startActivity(intent); 
+2

setType은 plain/text가 아닌 text/plain이어야합니다 (그렇지 않으면 ActivityNotFoundException이 발생합니다). 팁 고마워! – Andrew

0

... 내 애플 리케이션 중 하나에서, 당신은

emailIntent.setClassName("xxxgamil composer package name xxx", "xxxgmail composer class name xxx"); 
    startActivity(emailIntent); 
+0

코드를 찾았습니다. 그것은 당신의 코드처럼 보입니다 인 텐트 인 텐트 = 새로운 인 텐트 (android.content.Intent.ACTION_SEND); intent.setType ("text/plain"); 최종 PackageManager pm = getPackageManager(); 최종 목록 matches = pm.queryIntentActivities (intent, 0); ResolveInfo best = null; (최종 ResolveInfo 정보 : 일치) if (info.activityInfo.packageName.endsWith (".gm") || info.activityInfo.name.toLowerCase(). ("gmail") 포함) best = 정보; if (best! = null) intent.setClassName (best.activityInfo.packageName, best.activityInfo.name); startActivity (intent); – Arslan

+0

예 .... 모조의 링크도 유용합니다. –

+0

완료. 하지만 메일을 보낸 후. 대화 상자에 다시 나타납니다. 더 이상 열지 않으시겠습니까? 제안 사항이 있으십니까? – Arslan

15

에 있습니다 하나, 완벽한

public void shareToGMail(String[] email, String subject, String content) { 
    Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.putExtra(Intent.EXTRA_EMAIL, email); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); 
    emailIntent.setType("text/plain"); 
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, content); 
    final PackageManager pm = activity.getPackageManager(); 
    final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0); 
    ResolveInfo best = null; 
    for(final ResolveInfo info : matches) 
     if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail")) 
      best = info; 
    if (best != null) 
     emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name); 
    activity.startActivity(emailIntent); 
} 
+0

그 대답은 나를 위해 작동합니다. –

+0

1+ 감사합니다. 그것은 나를 위해 일합니다. – Ninja

0

아래 코드는 저에게 효과적입니다. 그러면 이메일 클라이언트가 검색되고 전송 된 값이 미리 채워진 새 이메일 작성기가 바로 시작됩니다. 이메일 클라이언트가 없으면 크래시를 피하기 위해 캐치되어야합니다.

이 솔루션에 대한 좋은 생각은 백 언론에서 이메일 의도가 시작된 앱 화면으로 직접 이동한다는 것입니다.

Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:")); 
    intent.putExtra(Intent.EXTRA_SUBJECT, "Your Subject"); 
    intent.putExtra(Intent.EXTRA_TEXT, "The message"); 
    try { 
     startActivity(intent); 
    } catch (android.content.ActivityNotFoundException ex) { 
     Toast.makeText(this, "Mail account not configured", Toast.LENGHT_SHORT).show(); 
    } 

고마워요!

관련 문제