android - 以编程方式从电子邮件客户端发送电子邮件后未收到回调
问题描述
我正在尝试使用安装在我的 android 设备中的 gmail 客户端发送电子邮件。但不幸的是,在 android 中以编程方式使用电子邮件客户端发送电子邮件后,我无法获得成功或失败回调。
请检查以下代码:
1)
public void getPermissions() {
int hasPermission = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.GET_ACCOUNTS);
if (hasPermission == PackageManager.PERMISSION_GRANTED) {
Account[] accounts = AccountManager.get(getActivity()).getAccounts();
if(accounts.length==0){
appController.showCustomToastWithMessage(context.getResources().getString(R.string.no_email_accounts), Constants.SNACKBAR_CANCEL_BUTTON_NAME, Constants.SNACKBAR_SUCCES_DISMISS_TIME);
}else {
getEmail(accounts);
}
} else {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.GET_ACCOUNTS}, 1);
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
}
2)
public void getEmail(Account[] Accounts) {
Pattern emailPattern = Patterns.EMAIL_ADDRESS;
for (Account account : Accounts) {
if (emailPattern.matcher(account.name).matches()) {
String possibleEmail = account.name;
if (!emailaccList.contains(possibleEmail)) {
emailaccList.add(possibleEmail);
}
}
}
if (emailaccList.size() != 0) {
String emailId [] = {emailaccList.get(0)};
shareToGMail(emailId, getString(R.string.contact_us), "");
}
}
3)
public void shareToGMail(String[] email, String subject, String content) {
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{storeUserDataDatabase.getCcEmailType(context)});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.setType("text/plain");
emailIntent.putExtra(Intent.EXTRA_TEXT, content);
final PackageManager pm = getActivity().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);
try {
startActivityForResult(emailIntent, 111);
}catch (android.content.ActivityNotFoundException ex){
appController.showCustomToastWithMessage("There is no email clients installed.", Constants.SNACKBAR_CANCEL_BUTTON_NAME, Constants.SNACKBAR_SUCCES_DISMISS_TIME);
}
}
解决方案
在 Gmail 上使用 Intent 发送的电子邮件没有回调。为此,您必须使用 Gmail API。
推荐阅读
- android - ViewModel 支持属性 [kotlin]
- scala - SBT AutoPlugin 依赖项
- css - SASS 源地图在 Google Chrome 中不起作用
- common-lisp - 突然得到 quri.parser::parse-scheme-string is undefined
- r - big.mark = "," 在转置数据帧时不适用于 Rmarkdown 中的 kable 函数
- jquery - Magento 将占位符文本添加到 textarea
- python - 这两个返回语句有什么区别?
- reactjs - React Redux - 如果尚未获得数组,如何加载详细信息?
- sql - 将 SQL 转换为 LINQ/EF
- python - 在 Python 中的两列中查找匹配的相似元素