2014-12-17 19 views
5

Jestem nowy w tym, ale co jest nie tak z moim fragmentem kodu? Otrzymuję komunikat o błędzie: "To działanie nie jest obecnie obsługiwane" po wybraniu łącza. Oto mój kod:Mailto Android: błąd "Nieobsługiwana akcja"

public void addEmail() { 

    TextView txt = (TextView) findViewById(R.id.emailtext); 

    txt.setOnClickListener(new View.OnClickListener(){ 


     public void onClick(View v){ 
      Intent intent = new Intent(); 
      String uriText = 
        "mailto:[email protected]" + 
        "?subject=" + URLEncoder.encode("some subject text here") + 
        "&body=" + URLEncoder.encode("some text here"); 

       Uri uri = Uri.parse(uriText); 

       Intent sendIntent = new Intent(Intent.ACTION_SENDTO); 
       sendIntent.setData(uri); 
       startActivity(Intent.createChooser(sendIntent, "Send email")); 

    }}); 

} 

Wielkie dzięki!

+0

@see https://stackoverflow.com/questions/2197741/how-can-i-send-emails-from- my-android-application – shkschneider

+0

@shkschneider, jak to rozwiązuje problem? – Sam

+0

Wpadłem na to w emulatorze Androida 4.0.2, gdy jeszcze nie założyłem konta e-mail w kliencie poczty elektronicznej Android. Założenie konta w kliencie rozwiązało problem. – Sam

Odpowiedz

1

Spróbuj tego, że pracował dla mnie:

public void addEmail() { 

    TextView txt = (TextView) findViewById(R.id.emailtext); 

    txt.setOnClickListener(new View.OnClickListener(){ 

    public void onClick(View v){ 

      String[] emails = {"[email protected]"}; 
      String subject = "your subject"; 
      String message = "your message"; 

      Intent email = new Intent(Intent.ACTION_SEND); 
      email.putExtra(Intent.EXTRA_EMAIL, emails); 
      email.putExtra(Intent.EXTRA_SUBJECT, subject); 
      email.putExtra(Intent.EXTRA_TEXT, message); 

      // need this to prompts email client only 
      email.setType("message/rfc822"); 

      startActivity(Intent.createChooser(email, "Choose an Email client :")); 
    }}); 

} 
+0

Testowałem i potwierdziłem, że to działa. Wygląda na to, że problem został spowodowany przez użycie 'setData()', gdy żadna aplikacja nie jest zgodna z intencją. – Sam

13

Problemem jest to, że prawdopodobnie masz uruchomiony na jednym z oficjalnych emulatory Android, a nie masz jeszcze założyć konto e-mail na nim. Emulatory otwierają aktywność com.android.fallback.Fallback, gdy tak się dzieje, ale wydaje się, że nie dzieje się to na urządzeniach rzeczywistych.

Można to wykryć przed próbą uruchomienia zamiar za pomocą tego kodu:

ComponentName emailApp = intent.resolveActivity(getPackageManager()); 
ComponentName unsupportedAction = ComponentName.unflattenFromString("com.android.fallback/.Fallback"); 
boolean hasEmailApp = emailApp != null && !emailApp.equals(unsupportedAction);