Android中Intent.ACTION_SENDTO触发ActivityNotFoundException问题求助
问题原因
你使用的Intent.ACTION_SENDTO必须指定目标URI(比如邮箱、短信地址),系统才能找到对应的处理应用。你的代码仅添加了EXTRA_TEXT和EXTRA_SUBJECT,但未设置data属性,导致系统找不到可处理该Intent的Activity,因此抛出ActivityNotFoundException。
解决方案
根据需求,有两种修改方式:
方式1:通用文本分享(支持微信、QQ等应用)
若想让用户选择任意支持分享的应用,改用Intent.ACTION_SEND并设置MIME类型为text/plain:
share.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, "I scored "+score+"/"+questions.length+" in my java quiz"); intent.putExtra(Intent.EXTRA_SUBJECT, "App chal gyi bc"); try { startActivity(Intent.createChooser(intent, "分享到")); }catch (ActivityNotFoundException e){ Toast.makeText(MainActivity.this, "没有找到可分享的应用", Toast.LENGTH_SHORT).show(); question.setText(e.toString()); } } });
- 用
createChooser可强制弹出应用选择器,确保用户能看到所有可用的分享渠道。
方式2:指定发送到邮箱(保留ACTION_SENDTO)
若想直接打开邮箱应用发送邮件,需给Intent设置mailto:协议的URI:
share.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Intent.ACTION_SENDTO); // 设置邮箱URI,可指定收件人(如"mailto:example@xxx.com"),留空则让用户输入 intent.setData(Uri.parse("mailto:")); intent.putExtra(Intent.EXTRA_TEXT, "I scored "+score+"/"+questions.length+" in my java quiz"); intent.putExtra(Intent.EXTRA_SUBJECT, "App chal gyi bc"); try { startActivity(intent); }catch (ActivityNotFoundException e){ Toast.makeText(MainActivity.this, "没有找到邮箱应用", Toast.LENGTH_SHORT).show(); question.setText(e.toString()); } } });
补充说明
ACTION_SENDTO是定向发送Intent,必须搭配data指定目标协议(如mailto:、smsto:),否则系统无法匹配对应Activity。ACTION_SEND是通用分享Intent,适合让用户选择多种应用,无需指定data,但必须设置MIME类型。
内容的提问来源于stack exchange,提问作者Ritam Arya
相关产品推荐
相关产品推荐

