在Android中发送电子邮件的问题?

时间:2011-07-25 11:47:25

标签: android email

我曾使用Intent代码发送电子邮件,我能够成功发送电子邮件,  但问题是,如果用户点击Gmail应用程序并打开收件箱,请单击电子邮件并按Home键,然后打开我的应用程序并单击电子邮件按钮,它会打开收件箱而不是  撰写页面 (即,它会转到我在Gmail上的最后一个视图,无论是收件箱,还是消息线程,甚至草稿消息) 所以我计划杀死背景Gmail进程但 Mr.Commonsware 在他的回答中提到我们无法从我们的应用程序中杀死另一个应用程序,所以我试图杀死Back Ground进程并重新启动包我的所有努力都是徒劳无功。

这是我的电子邮件发送代码

public static ComponentName name = null;

    name = new ComponentName(
            "com.android.email",
            "com.android.email.activity.MessageCompose");

Intent intent = new Intent(Intent.ACTION_SEND);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

        intent.setComponent(name);
        intent.setType("application/octet-stream");
        intent.putExtra(Intent.EXTRA_EMAIL,
                new String[] { " " });
        intent.putExtra(Intent.EXTRA_SUBJECT, "Test");
        intent.putExtra(
                Intent.EXTRA_TEXT,
                Html.fromHtml("<b> test Message</b>"));
        intent.putExtra(Intent.EXTRA_STREAM,
                Uri.parse("file:///" + "sdcard/download/" + imgfilename));  

        startActivity(intent);

这是我的restartPackage代码

            ActivityManager aM = (ActivityManager);
getApplicationContext().getSystemService(getApplicationContext().ACTIVITY_SERVICE);
            aM.restartPackage("com.android.email");

这是我的Kill BackGround流程代码

                        ActivityManager aM = (ActivityManager)
        getApplicationContext().getSystemService(Catalogue.content_holder.getApplicationContext().ACTIVITY_SERVICE);
                        aM.killBackgroundProcesses("com.android.email");

这是我的代码,它获取所有正在运行的应用程序并检查其他电子邮件应用程序是否已经运行,如果它正在运行然后终止该进程

    ActivityManager manager =  (ActivityManager);    getApplicationContext.getSystemService(getApplicationContext.ACTIVITY_SERVICE);
            List<RunningAppProcessInfo> activityes = ((ActivityManager) manager).getRunningAppProcesses();

            for (int iCnt = 0; iCnt < activityes.size(); iCnt++){

                System.out.println("APP: "+iCnt +" "+ activityes.get(iCnt).processName);

if (activityes.get(iCnt).processName.contains("com.android.email")){
                    android.os.Process.sendSignal(activityes.get(iCnt).pid, android.os.Process.SIGNAL_KILL);
                     android.os.Process.killProcess(activityes.get(i).pid);
                    //manager.killBackgroundProcesses("com.android.email");

//manager.restartPackage("com.android.email");  

                     System.out.println("Inside if");
                }

            }

2 个答案:

答案 0 :(得分:2)

通过删除此标志并添加以下标志

来解决此问题
         intent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK 
            | Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | 
         Intent.FLAG_ACTIVITY_CLEAR_TOP 
| Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY 
    | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED |
            Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

答案 1 :(得分:1)

尝试:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
            | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
            | Intent.FLAG_ACTIVITY_CLEAR_TASK );