Проблема с отправкой электронной почты в Android? - PullRequest
2 голосов
/ 25 июля 2011

Я использовал код Intent для отправки электронной почты, я смог отправить письмо успешно, но моя проблема в том, что если пользователь щелкнет приложение Gmail и откроет папку «Входящие», щелкните по электронной почте и нажмите клавишу «Домой», затем откройте свое приложение и нажмитеКнопка «Электронная почта» открывает папку «Входящие», а не страницу создания (т. Е. Она переходит к любому последнему просмотру в Gmail, к которому относятся сообщения, либо к входящей почте, либо к цепочке сообщений, либо даже к черновику сообщения) поэтому я планировал убить фоновый процесс Gmail, но Mr.Commonsware упомянул в своем ответе, что мы не можем убить другое приложение из нашего приложения, поэтому я пытаюсь убить фоновый процесс и перезапуститьпакет все мои усилия были напрасны.

Вот мой код отправки электронной почты

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 ]

2 голосов
/ 26 июля 2011

Это было исправлено простым удалением этого флага и добавлены следующие флаги

         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 голос
/ 25 июля 2011

Попробуйте:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
            | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
            | Intent.FLAG_ACTIVITY_CLEAR_TASK );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...