запустить приложение смс с намерением


144

У меня есть вопрос о намерении ... Я пытаюсь запустить приложение смс ...

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setType("vnd.android-dir/mms-sms");
int flags = Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP |
    Intent.FLAG_ACTIVITY_CLEAR_TOP;
intent.setFlags(flags);
intent.setData(Uri.parse("content://sms/inbox"));
context.startActivity(intent);

Итак, вы можете видеть, что я вкладываю слишком много вещей в свои намерения, но это потому, что я не знаю, как я могу это сделать ... Спасибо


1
Оформить заказ gist.github.com/gelldur/9c199654c91b13478979 Вы можете поделиться с помощью приложения SMS
Давид Дрозд

Ответы:


238

Чтобы начать работу с SMS, все что вам нужно это:

Intent sendIntent = new Intent(Intent.ACTION_VIEW);         
sendIntent.setData(Uri.parse("sms:"));

Вы можете добавить дополнения, чтобы заполнить ваше собственное сообщение и тому подобное

sendIntent.putExtra("sms_body", x); 

тогда просто начните деятельность с намерением.

startActivity(sendIntent);

Я пытался, но когда я пишу именно то, что вы даете, консоль eclipse возвращает (при компиляции) "Нет активности Launcher найдено!"
Olivier69

хорошо, у вас есть действие со следующими атрибутами в его фильтре намерений в вашем манифесте? <action android: name = "android.intent.action.MAIN" /> <категория android: name = "android.intent.category.LAUNCHER" />
jqpubliq

на самом деле, запуск происходит из приложения. Perh'aps отсюда, я помещаю то, что вы сделали, в манифест, и ничего не происходит ... Я проверил мою кнопку с другой функцией, и эта не хочет идти !!
Olivier69

22
чтобы автоматически включить номер телефона в поле «to», измените строку кода setData на sendIntent.setData(Uri.parse("sms:" + phoneNumber));(спасибо jqpubliq и jaydeepw)
tmr

2
Мне нужно проверить, отправлено SMS или нет, когда пользователь отправит смс из моего приложения через Intent tms, как я могу это сделать?
пользователь

139
Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address", "12125551212");
smsIntent.putExtra("sms_body","Body of Message");
startActivity(smsIntent);

4
Лучшее решение! Спасибо!
Ник

20
Имейте в виду, это не будет работать для Android 4.4 и, вероятно, до ... "vnd.android-dir / mms-sms" больше не поддерживается
Max Ch

2
Только что протестировал на Android 4.4.2 и он работает. Можете ли вы связать меня с этим объявлением? @MaxCh
theknut

3
Если номер телефона не добавлен, как в моем случае, просто добавьте:intent.setData(Uri.parse("smsto:" + phoneNumber));
Утопия

4
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW typ=vnd.android-dir/mms-sms (has extras) }
Нгуен Минь Бинь

49

Если версия Android - Kitkat или выше, пользователи могут изменить приложение смс по умолчанию. Этот метод получит приложение sms по умолчанию и запустит приложение sms по умолчанию.

private void sendSMS() {    
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) // At least KitKat
      {
         String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(this); // Need to change the build to API 19

         Intent sendIntent = new Intent(Intent.ACTION_SEND);
         sendIntent.setType("text/plain");
         sendIntent.putExtra(Intent.EXTRA_TEXT, "text");

         if (defaultSmsPackageName != null)// Can be null in case that there is no default, then the user would be able to choose
         // any app that support this intent.
         {
            sendIntent.setPackage(defaultSmsPackageName);
         }
         startActivity(sendIntent);

      }
      else // For early versions, do what worked for you before.
      {
         Intent smsIntent = new Intent(android.content.Intent.ACTION_VIEW);
         smsIntent.setType("vnd.android-dir/mms-sms");
         smsIntent.putExtra("address","phoneNumber");         
         smsIntent.putExtra("sms_body","message");
         startActivity(smsIntent);
      }
   }

2
Я использую версию KitKat. Я хочу установить номер получателя в поле Кому. Как я могу установить это?
Картикеян Ве

3
@KarthikeyanVe, пожалуйста, вы можете попробовать? Intent sendIntent = new Intent (Intent.ACTION_SENDTO); sendIntent.setData (Uri.parse ( "smsto: PhoneNumber"));
android_developer

Я попытался. Работает нормально. Но когда я нажимаю кнопку «Назад» в приложении сообщений, оно также закрывает мое приложение. Если я снова нажал из приложения сообщений, он должен вернуться в мое приложение, где я оставил.
Картикеян Ве

2
Отличный ответ. Используйте, если вы хотите перейти непосредственно к приложению SMS по умолчанию, работает как шарм. Если вы хотите, чтобы chooser видел другие ответы здесь.
Неманья Ковачевич

1
почему приложение закрывается, когда я возвращаюсь из сообщения
Мухаммед Юнас

31
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);

Это все, что вам нужно.


Код работает на Android 4.2.2, он открывает вид списка для смс. это то что мне нужно !!!
VISHAL VIRADIA

22

Если вы хотите запустить действие «Составление SMS» из какого-либо другого действия, а также вам необходимо передать номер телефона и текст SMS, используйте этот код:

Uri sms_uri = Uri.parse("smsto:+92xxxxxxxx"); 
Intent sms_intent = new Intent(Intent.ACTION_SENDTO, sms_uri); 
sms_intent.putExtra("sms_body", "Good Morning ! how r U ?"); 
startActivity(sms_intent); 

Примечание: здесь sms_bodyи smsto:- это клавиши для распознавания текста и номера телефона в SMS-сообщениях, поэтому будьте осторожны.


приложение закрывается, когда оно запускает намерение сообщения или когда я нажимаю клавишу возврата, приложение закрывается
Мухаммед Юнас

Прежде всего, скажите мне, когда вы выполняете этот код, затем он открывает функцию записи SMS-сообщений. Если приложение закрывается после нажатия кнопки «Назад», то в вашем коде могут возникнуть проблемы, особенно в такой публичной функции void BackPressed () {}, как это
Pir Фахим Шах

я не перезаписывал BackPresed Functionn
Мухаммед Юнас

17

Вот код, который откроет действие SMS, предварительно заполненное номером телефона, на который необходимо отправить SMS. Это прекрасно работает как на эмуляторе, так и на устройстве .

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.setData(Uri.parse("sms:" + phoneNumber));
startActivity(smsIntent);

1
как я могу прикрепить картинку к этому сообщению?
unresolved_external

У меня 1 вопрос по этому поводу, если мы видим код структуры, setType () делает данные как null, а setData () делает тип как null. Так как же тип будет сохраняться в этом случае?
AndroidGuy

как мы можем изменить шрифт текста в смс
jyomin

5

использование

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList");

1
Это работает для меня со стандартным приложением, например, на эмуляторе, но, вероятно, не работает на Galaxy S3, например.
Г. Ломбард

1
@ G.Lombard Lombard Да, этот код не работает на s3. любое решение для s3?
Вивек Кумар Шривастава

4

Я использую:

Intent sendIntent = new Intent(Intent.ACTION_MAIN);
sendIntent.putExtra("sms_body", "text");
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);

4
Intent eventIntentMessage =getPackageManager()
 .getLaunchIntentForPackage(Telephony.Sms.getDefaultSmsPackage(getApplicationContext));
startActivity(eventIntentMessage);

Для SDK_INT> = 19 (где этот API доступен) это работает. Фактически, это единственное работающее решение в моем Nexus 6 с Nougat, если вы хотите открыть приложение sms со списком сообщений
lujop

3
try {
    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.setData(Uri.parse("smsto:" + Uri.encode(number)));
    smsIntent.putExtra("address", number);
    smsIntent.putExtra("sms_body", message);

    PackageManager pm = activity.getPackageManager();
    List<ResolveInfo> resInfo = pm.queryIntentActivities(smsIntent, 0);

    for (int i = 0; i < resInfo.size(); i++) {
        ResolveInfo ri = resInfo.get(i);
        String packageName = ri.activityInfo.packageName;

        if (packageName.contains("sms")) {
            //Log.d("TAG", packageName + " : " + ri.activityInfo.name);
            smsIntent.setComponent(new ComponentName(packageName, ri.activityInfo.name));
        }
    }
    activity.startActivity(smsIntent);
} catch (Exception e) {
    // Handle Error
}

Лучший способ сделать это.


Только этот код работает для меня ... Однако, как избежать выбора нескольких приложений смс ... только по умолчанию начнется ..
Махбубур Рахман Хан

3

Вы можете открыть приложение sms по умолчанию и передать детали, как показано ниже:
Примечание. Если вы хотите отправить несколько номеров, отделите каждый номер с помощью «;» внутри строки

String mblNumVar = "9876543210;9123456789";
Intent smsMsgAppVar = new Intent(Intent.ACTION_VIEW);
smsMsgAppVar.setData(Uri.parse("sms:" +  mblNumVar));
smsMsgAppVar.putExtra("sms_body", "Hello Msg Tst Txt");
startActivity(smsMsgAppVar);

| Или | Используйте эту функцию:

void openSmsMsgAppFnc(String mblNumVar, String smsMsgVar)
{
    Intent smsMsgAppVar = new Intent(Intent.ACTION_VIEW);
    smsMsgAppVar.setData(Uri.parse("sms:" +  mblNumVar));
    smsMsgAppVar.putExtra("sms_body", smsMsgVar);
    startActivity(smsMsgAppVar); 
}

Это показывает два варианта: 1. видеовстречу и 2. приложение сообщений по умолчанию. Я хочу принудительно открыть приложение сообщений Android. Как мы можем заархивировать это?
Милинд Мевада

3

В kotlin это может быть легко реализовано следующим образом:

/**
 * If android version is Kitkat or above, users can change default sms application.
 * This method will get default sms app and start default sms app.
 */
private fun openSMS() {
    val message = "message here"
    val phone = "255754......." //255 Tanzania code.

    val uri = Uri.parse("smsto:+$phone")
    val intent = Intent(Intent.ACTION_SENDTO, uri)

    with(intent) {
        putExtra("address", "+$phone")
        putExtra("sms_body", message)
    }

    when {
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT -> {
            //Getting the default sms app.
            val defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(context)

            // Can be null in case that there is no default, then the user would be able to choose
            // any app that support this intent.
            if (defaultSmsPackageName != null) intent.setPackage(defaultSmsPackageName)

            startActivity(intent)
        }
        else -> startActivity(intent)
    }
}

Это модифицированный ответ @mustafasevgi


2
Intent sendIntent = new Intent(Intent.ACTION_SEND); 
//CHANGE YOUR MESSAGING ACTIVITY HERE IF REQUIRED 
sendIntent.setClassName("com.android.mms", "com.android.mms.ui.ComposeMessageActivity");
sendIntent.putExtra("sms_body",msgbody); 
sendIntent.putExtra("address",phonenumber);
//FOR MMS
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/mms.png"));
sendIntent.setType("image/png");
startActivity(sendIntent);

2

Лучший код, который работает с приложением SMS по умолчанию.

Uri SMS_URI = Uri.parse("smsto:+92324502****"); //Replace the phone number
Intent sms = new Intent(Intent.ACTION_VIEW,SMS_URI);    
sms.putExtra("sms_body","This is test message"); //Replace the message witha a vairable 
startActivity(sms);

1

Приведенный ниже код работает на Android 6.0.
Он откроет поисковое действие в приложении обмена сообщениями по умолчанию с разговорами, относящимися к определенной строке.

Intent smsIntent = new Intent(Intent.ACTION_MAIN);
        smsIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        smsIntent.setClassName("com.android.mms", "com.android.mms.ui.SearchActivity");
        smsIntent.putExtra("intent_extra_data_key", "string_to_search_for");
        startActivity(smsIntent);  

Вы можете начать поиск с намерением. Откроется поисковая активность приложения обмена сообщениями по умолчанию. Теперь, чтобы показать список определенных разговоров в поисковой активности, вы можете указать строку поиска в виде дополнительной строки с ключом

"Intent_extra_data_key"

как показано в onCreate этого класса

String searchStringParameter = getIntent().getStringExtra(SearchManager.QUERY);
    if (searchStringParameter == null) {
        searchStringParameter = getIntent().getStringExtra("intent_extra_data_key" /*SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA*/);
    }
    final String searchString = searchStringParameter != null ? searchStringParameter.trim() : searchStringParameter;

Вы также можете передать SENDER_ADDRESS SMS-сообщения как дополнительную строку, в которой будут перечислены все разговоры с указанным адресом отправителя.

Проверьте com.android.mms.ui.SearchActivity для получения дополнительной информации

Вы также можете проверить этот ответ


0

на эмуляторе это работа для меня

Intent i = new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", number, null));
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                i.putExtra("sms_body", remindingReason);

                startActivity(i);

0

Sms Intent:

Intent intent = new Intent("android.intent.action.VIEW");
        /** creates an sms uri */
        Uri data = Uri.parse("sms:");
        intent.setData(data);

0

Составить СМС:

Uri smsUri = Uri.parse("tel:" + to);
Intent intent = new Intent(Intent.ACTION_VIEW, smsUri);
intent.putExtra("address", to);
intent.putExtra("sms_body", message);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);

0

Либо вы можете использовать это, оба работают нормально на Android выше 4.4

    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.setType("vnd.android-dir/mms-sms");
    smsIntent.putExtra("address","9212107320");
    smsIntent.putExtra("sms_body","Body of Message");
    startActivity(smsIntent);

или

    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.putExtra("sms_body","Body of Message");
    smsIntent.setData(Uri.parse("sms:9212107320"));
    startActivity(smsIntent);

0

Вы можете использовать следующий фрагмент кода для достижения своей цели:

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:"+model.getPhoneNo().trim()));
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
smsIntent.putExtra("sms_body","Hello this is dummy text");
startActivity(smsIntent);

Если вам не нужен текст, удалите ключ sms_body.

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:"+shopkepperDataModel.getPhoneNo().trim()));
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(smsIntent);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.