Только приложения электронной почты для разрешения намерения

Таким образом, мне пришлось восстановить кучу удаленных файлов из определенного коммита, и я управлял им двумя командами:

git show <rev> --diff-filter=D --summary --name-only --no-commit-id | xargs git checkout <rev>^ -- 
git show <rev> --diff-filter=D --summary --name-only --no-commit-id | xargs git reset HEAD 

(Обратите внимание на конечное пространство в конце каждой команды. )

Файлы были добавлены в файл .gitignore, а затем очищены с помощью git rm, мне нужно восстановить файлы, но затем отключить их. У меня было сотни файлов для восстановления, набрав все вручную для каждого файла, так как в других примерах было слишком медленно.

29
задан Waheed Khan 28 June 2011 в 12:47
поделиться

9 ответов

Попробуйте

String subject = "Feedback";
            String bodyText = "Enter text email";
            String mailto = "mailto:bob@example.org" +
                    "?cc=" + "" +
                    "&subject=" + Uri.encode(subject) +
                    "&body=" + Uri.encode(bodyText);

            Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
            emailIntent.setData(Uri.parse(mailto));

            try {
                startActivity(emailIntent);
            } catch (ActivityNotFoundException e) {
                //TODO: Handle case where no email app is available
            }

Предоставлено: https://medium.com/@cketti/android-sending-email-using-intents-3da63662c58f

.
3
ответ дан Malik 28 June 2011 в 12:47
поделиться
 private void sendEmail(Connect connect) {
    Intent email = new Intent(Intent.ACTION_SENDTO);
    email.setData(Uri.parse("mailto:"));
    email.putExtra(Intent.EXTRA_EMAIL, new String[]{connect.getEmail()});
    email.putExtra(Intent.EXTRA_SUBJECT, "");
    email.putExtra(Intent.EXTRA_TEXT, "");
    try {
        startActivity(Intent.createChooser(email, getString(R.string.choose_email_client)));
    } catch (ActivityNotFoundException activityNotFoundException) {
        UIUtils.showShortSnackBar(fragmentConnectLayout, getString(R.string.no_email_client));
    }
}

См. https://developer.android.com/guide/components/intents-common.html#Email

.
9
ответ дан Ganesh Kanna 28 June 2011 в 12:47
поделиться

Это работа для меня, чтобы открывать только почтовые приложения:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:jorgesys12@gmail.com"));
startActivity(intent);
4
ответ дан Elenasys 28 June 2011 в 12:47
поделиться

Вот как я отправляю электронное письмо с вложениями (доказано, что оно работает с вложениями различных типов MIME, даже в одном и том же письме) и разрешает только приложения электронной почты (также есть решение для случаев, когда ни одно приложение не поддерживает «mailto»). Сначала мы пытаемся получить действия, которые поддерживают формат mailto:. Если ничего не найдено, мы получаем все действия, которые поддерживают тип MIME message/rfc822. Мы выбираем приложение по умолчанию (если есть по умолчанию) или разрешаем пользователю выбирать из доступных приложений. Если ни одно приложение не поддерживает mailto: и message/rfc822, то мы используем средство выбора по умолчанию.

public static void sendEmail(final Context p_context, final String p_subject, final String p_body, final ArrayList<String> p_attachments)
{
    try
    {
        PackageManager pm = p_context.getPackageManager();
        ResolveInfo selectedEmailActivity = null;

        Intent emailDummyIntent = new Intent(Intent.ACTION_SENDTO);
        emailDummyIntent.setData(Uri.parse("mailto:some@emaildomain.com"));

        List<ResolveInfo> emailActivities = pm.queryIntentActivities(emailDummyIntent, 0);

        if (null == emailActivities || emailActivities.size() == 0)
        {
            Intent emailDummyIntentRFC822 = new Intent(Intent.ACTION_SEND_MULTIPLE);
            emailDummyIntentRFC822.setType("message/rfc822");

            emailActivities = pm.queryIntentActivities(emailDummyIntentRFC822, 0);
        }

        if (null != emailActivities)
        {
            if (emailActivities.size() == 1)
            {
                selectedEmailActivity = emailActivities.get(0);
            }
            else
            {
                for (ResolveInfo currAvailableEmailActivity : emailActivities)
                {
                    if (true == currAvailableEmailActivity.isDefault)
                    {
                        selectedEmailActivity = currAvailableEmailActivity;
                    }
                }
            }

            if (null != selectedEmailActivity)
            {
                // Send email using the only/default email activity
                sendEmailUsingSelectedEmailApp(p_context, p_subject, p_body, p_attachments, selectedEmailActivity);
            }
            else
            {
                final List<ResolveInfo> emailActivitiesForDialog = emailActivities;

                String[] availableEmailAppsName = new String[emailActivitiesForDialog.size()];
                for (int i = 0; i < emailActivitiesForDialog.size(); i++)
                {
                    availableEmailAppsName[i] = emailActivitiesForDialog.get(i).activityInfo.applicationInfo.loadLabel(pm).toString();
                }

                AlertDialog.Builder builder = new AlertDialog.Builder(p_context);
                builder.setTitle(R.string.select_mail_application_title);
                builder.setItems(availableEmailAppsName, new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        sendEmailUsingSelectedEmailApp(p_context, p_subject, p_body, p_attachments, emailActivitiesForDialog.get(which));
                    }
                });

                builder.create().show();
            }
        }
        else
        {
            sendEmailUsingSelectedEmailApp(p_context, p_subject, p_body, p_attachments, null);
        }
    }
    catch (Exception ex)
    {
        Log.e(TAG, "Can't send email", ex);
    }
}

protected static void sendEmailUsingSelectedEmailApp(Context p_context, String p_subject, String p_body, ArrayList<String> p_attachments, ResolveInfo p_selectedEmailApp)
{
    try
    {
        Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);

        String aEmailList[] = { "some@emaildomain.com"};

        emailIntent.putExtra(Intent.EXTRA_EMAIL, aEmailList);
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, null != p_subject ? p_subject : "");
        emailIntent.putExtra(Intent.EXTRA_TEXT, null != p_body ? p_body : "");

        if (null != p_attachments && p_attachments.size() > 0)
        {
            ArrayList<Uri> attachmentsUris = new ArrayList<Uri>();

            // Convert from paths to Android friendly Parcelable Uri's
            for (String currAttachemntPath : p_attachments)
            {
                File fileIn = new File(currAttachemntPath);
                Uri currAttachemntUri = Uri.fromFile(fileIn);
                attachmentsUris.add(currAttachemntUri);
            }
            emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, attachmentsUris);
        }

        if (null != p_selectedEmailApp)
        {
            Log.d(TAG, "Sending email using " + p_selectedEmailApp);
            emailIntent.setComponent(new ComponentName(p_selectedEmailApp.activityInfo.packageName, p_selectedEmailApp.activityInfo.name));

            p_context.startActivity(emailIntent);
        }
        else
        {
            Intent emailAppChooser = Intent.createChooser(emailIntent, "Select Email app");

            p_context.startActivity(emailAppChooser);
        }
    }
    catch (Exception ex)
    {
        Log.e(TAG, "Error sending email", ex);
    }
}
14
ответ дан Muzikant 28 June 2011 в 12:47
поделиться

В Android нет такой вещи, как электронная почта. Там также нет фильтра намерений, который можно создать, чтобы включать только почтовые приложения. Каждое приложение (или действие) может определять свои собственные фильтры намерений.

Таким образом, при использовании намерения ACTION_SEND, вам придется полагаться на интеллект пользователя, чтобы выбрать свое любимое почтовое приложение из списка (а не TubeMate).

4
ответ дан ddewaele 28 June 2011 в 12:47
поделиться

вы также можете использовать:

//writes messages only to email clients
public void setWriteEmailButton() {
    btnWriteMail.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Intent i = new Intent(Intent.ACTION_SENDTO);
            i.setData(Uri.parse("mailto:"));
            i.putExtra(Intent.EXTRA_EMAIL  , new String[]{mConsultantInfos.getConsultantEMail()});
            i.putExtra(Intent.EXTRA_SUBJECT, mContext.getString(R.string.txtSubjectConsultantMail));
            i.putExtra(Intent.EXTRA_TEXT   , "");
            try {
                startActivity(Intent.createChooser(i, mContext.getString(R.string.txtWriteMailDialogTitle)));
            } catch (android.content.ActivityNotFoundException ex) {
                UI.showShortToastMessage(mContext, R.string.msgNoMailClientsInstalled);
            }
        }
    });
}

повеселиться (комбинация обоих;))

4
ответ дан cV2 28 June 2011 в 12:47
поделиться

Когда я использую намерение, android.content.Intent.ACTION_SENDTO не работает для меня, потому что показывает много приложений, некоторые приложения не являются почтовыми клиентами. Я нашел этот способ, и он отлично работает для меня.

Intent testIntent = new Intent(Intent.ACTION_VIEW);  
Uri data = Uri.parse("mailto:?subject=" + "blah blah subject" + "&body=" + "blah blah body" + "&to=" + "sendme@me.com");  
testIntent.setData(data);  
startActivity(testIntent);
1
ответ дан Geovanny Buitrago 28 June 2011 в 12:47
поделиться

Вы также можете использовать это. Это более эффективно

Intent mailIntent = new Intent(Intent.ACTION_SEND);

  String mailTo[] = new String[] { "MAIL_TO_1", "MAIL_TO_2" };
  mailIntent.putExtra(Intent.EXTRA_EMAIL, mailTo);
  mailIntent.putExtra(Intent.EXTRA_SUBJECT, "Your subject");
  mailIntent.putExtra(Intent.EXTRA_TEXT, "MailsBody");
  mailIntent.setType("plain/text");

  startActivity(Intent.createChooser(mailIntent, "only email client"));

Этот пример кода показывает только почтовый клиент, который в настоящее время установлен на вашем устройстве

-2
ответ дан Festus Tamakloe 28 June 2011 в 12:47
поделиться
String recepientEmail = ""; // either set to destination email or leave empty
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:" + recepientEmail));
startActivity(intent);

Смысл в том, чтобы использовать ACTION_SENDTO в качестве действия и mailto: в качестве данных. Если вы хотите, чтобы пользователь указал адрес электронной почты, используйте просто mailto:; если вы сами указали адрес электронной почты, используйте mailto:name@domain.com

Предлагаемый метод фильтрует все приложения, которые могут отправлять электронную почту (например, приложение электронной почты по умолчанию или gmail)

69
ответ дан Mykhailo Gaidai 28 June 2011 в 12:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: