A应用打开手机qq邮箱后不能返回到原来的界面,一直停留在qq邮箱界面解决之法

      公司要把一些数据在安卓app上通过调用手机邮箱以附件的形式发送给某些人员,经过调试,最终成功地完成数据存储到本地,然后转化成邮件的多个附件,发送多个文本附件,邮箱发送后回调,这期间一直调用的是系统邮箱,发送取消、成功、失败都能正常回调、返回到点击发送邮件的界面,后来用户反映打开邮箱后发送取消后不能退出来,一直按返回键退出程序了,再打开A还是在邮箱界面,听这么一说,我认为这是发送取消后A应用崩溃了,这么严重的问题,那我得赶紧查查,用了好几个手机测试,各种测试,也没重现用户反映的问题,正好用户还要来公司办事,那等着他来再看问题的具体情形,第二天见到用户,演示他怎么操作的,原来是打开的qq邮箱,经过摸索,在qq邮箱里有个关闭应用,关闭后,就可以回到A应用,但是这样体验非常不好,每次主动跳到关闭qq邮箱界面去关闭,那就太麻烦了,公司也是不允许给用户带来如此不便,然后几个手机下载了qq邮箱,经过测试,在A中打开qq邮箱后,还真是都退不出来,然后网上搜了各种资料,没有一个有关打开手机qq邮箱后无法返回原来的应用的解答,看来这问题是我一个人遇见啊,期间还测试了苹果手机打开qq邮箱会怎么样,结果苹果手机在A应用上打开qq邮箱后能正常退出来,然后还测试了其他app打开qq邮箱后也能正常返回到原来的界面,看来不是qq邮箱的问题,一定是A应用哪里没写对,在测试时还偶然发现,如果qq邮箱先打开了,再在A应用打开qq邮箱返回的话是可以正常返回出来的,经过各种测试,必须先在调qq邮箱之前打开qq邮箱,才能退出来,调用开启qq邮箱再去打开qq邮箱是无法退出qq邮箱的,但是先打开qq邮箱再去打开A应用,体验也是非常不好,公司肯定不允许,那怎么办呢,既然问题已经确定,也没其他现成的解决之法,那就分析自己的代码吧,原来代码如下
public static void sendXX(Activity context, String name) {
File mZipFile = new File(String.valueOf(context.getCacheDir()));
        File[] files = mZipFile.listFiles();
        if (files != null) {
            ArrayList uris = new ArrayList();
            for (int i = 0; i < files.length; i++) {
                File file = files[i];
                LogUtil.e("发送附件地址=" + file.getAbsolutePath());
                Uri uriForFile = FileProvider.getUriForFile(context, "com.hand.hand16.provider", file);
                uris.add(uriForFile);
            }

            Intent intent = new Intent();

            intent.setAction(Intent.ACTION_SEND_MULTIPLE);
         
            // 收件人
            intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]","[email protected]",});
            // 主题
            intent.putExtra(Intent.EXTRA_SUBJECT, "标定数据-"+name);
            // 正文
           //intent.putExtra(android.content.Intent.EXTRA_TEXT, "标定数据");//多附件发送执行这句会有string不能转化为list的警告;
            intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
            intent.setType("text/plain");
        
            context.startActivityForResult(intent,1);
        }
 }

因为邮箱发送不管取消、成功、失败还要其他业务逻辑去处理,所以用了回调,重新看了代码,想起打开第三方某个activity,会用到一个设置:
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
想起就干,把这句加到 Intent intent = new Intent()之后,奇迹出现了,再次从A应用打开qq邮箱,返回,都可以正常返回到原来的界面,不会一直停留在qq邮箱界面。为什么加了这句就可以正常返回呢,以及先打开qq邮箱也可以正常返回呢,再此基础上,后来还发现,不用context.startActivityForResult(intent,1), 也不用intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)去调用邮箱,而用  context.startActivity(intent);也能正常返回,而绝大部分人用的都是不用回调的方法打开邮箱的,也许是业务对邮件发送状态不需要这也是为什么网上搜不到我遇见的问题;

你可能感兴趣的:(android)