iniciar o aplicativo sms com uma intenção

144

Eu tenho uma pergunta sobre uma intenção ... Eu tento iniciar o aplicativo sms ...

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);

então você pode ver que eu coloco muitas coisas na minha intenção, mas é porque eu não sei como posso fazer ...

Olivier69
fonte
1
Checkout gist.github.com/gelldur/9c199654c91b13478979 Você pode compartilhar pelo aplicativo SMS
Dawid Drozd

Respostas:

238

Para começar a iniciar a atividade sms, tudo o que você precisa é este:

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

Você pode adicionar extras para preencher sua própria mensagem e coisas assim

sendIntent.putExtra("sms_body", x); 

então apenas startActivity com a intenção.

startActivity(sendIntent);
jqpubliq
fonte
Tentei, mas quando escrevo exatamente o que você fornece, o eclipse retorna ao console (ao compilar) "Nenhuma atividade do Launcher encontrada!"
precisa saber é o seguinte
ok, você tem uma atividade com os seguintes atributos no filtro de intenção no seu manifesto? <ação android: name = "android.intent.action.MAIN" /> <categoria android: name = "android.intent.category.LAUNCHER" />
jqpubliq
de fato, o lançamento vem de uma atividade de aplicativo. Ora vem daqui, eu coloquei o que você fez no manifesto e nada acontece ... Eu testei meu botão com outra função e essa não quer ir !!
precisa saber é o seguinte
22
para incluir automaticamente o número de telefone na caixa 'para', altere a linha de código setData para sendIntent.setData(Uri.parse("sms:" + phoneNumber));(obrigado jqpubliq e jaydeepw)
tmr
2
preciso verificar se o SMS foi enviado ou não quando o usuário enviará sms do meu aplicativo por meio do Intent ti sms como posso fazer isso?
usuário
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);
Pratik Sharma
fonte
4
A melhor solução! Obrigado!
Nick
20
Esteja ciente, isso não vai funcionar para o Android 4.4 e provavelmente até ... "vnd.android-dir / mms-sms" não é mais suportada
Max Ch
2
Acabei de testar no Android 4.4.2 e está funcionando. Você pode me vincular a esse anúncio? @MaxCh
theknut
3
Se o número de telefone não for adicionado como no meu caso, basta adicionar:intent.setData(Uri.parse("smsto:" + phoneNumber));
Utopia
4
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW typ=vnd.android-dir/mms-sms (has extras) }
Nguyen Minh Binh
49

Se a versão do Android for Kitkat ou superior, os usuários poderão alterar o aplicativo sms padrão. Este método obterá o aplicativo sms padrão e iniciará o aplicativo sms padrão.

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);
      }
   }
android_developer
fonte
2
Estou usando a versão KitKat. Quero definir o número do receptor no campo Para. Como posso definir isso?
precisa
3
@KarthikeyanVe, por favor, você pode tentar? Intenção sendIntent = new Intent (Intent.ACTION_SENDTO); sendIntent.setData (Uri.parse ("smsto: phonenumber"));
Android_developer 12/03/2015
Eu tentei. Está funcionando bem. Mas quando clico no botão Voltar do aplicativo de mensagens, ele também fecha o aplicativo. Se eu pressionar novamente a partir do aplicativo de mensagens, ele deverá retornar ao meu aplicativo de onde saí.
precisa
2
Ótima resposta. Use se você deseja ir diretamente para o aplicativo SMS padrão, funciona como um encanto. Se você deseja escolher, consulte outras respostas aqui.
Nemanja Kovacevic
1
por aplicativo perto quando eu voltar de mensagem
Muhammad Younas
31
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);

É tudo o que você precisa.

skyisle
fonte
código está funcionando no Android 4.2.2, ele abre a exibição de lista para sms. isso é o que eu preciso !!!
VISHAL VIRADIA
22

Se você deseja iniciar a atividade de composição de SMS a partir de outras atividades e também precisar passar um número de telefone e um texto SMS, use este código:

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); 

Nota: aqui as teclas sms_bodye smsto:são para reconhecer o número de telefone e texto na atividade de composição do SMS, portanto, tenha cuidado aqui.

Pir Fahim Shah
fonte
aplicativo está perto quando ele começar a mensagem de intenção ou quando eu aperto de volta aplicativo chave é fechada
Muhammad Younas
Antes de tudo, diga-me quando você executa esse código, em seguida, ele abre a função write sms. Se o aplicativo fechar após pressionar o botão Voltar, haveria algum problema no seu código, especialmente na função pública anulada BackPressed () {} como esta
Pir Fahim Shah
eu não substitui o BackPresed Functionn
Muhammad Younas
17

Aqui está o código que abrirá a atividade do SMS pré-preenchida com o número de telefone para o qual o SMS deve ser enviado. Isso funciona bem no emulador e no dispositivo .

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);
JaydeepW
fonte
1
como posso anexar uma imagem a esta mensagem?
Unresolved_external
Tenho uma pergunta sobre isso, se virmos o código da estrutura, setType () torna os dados como nulos e setData () torna o tipo como nulo. Então, como o tipo persiste nesse caso?
AndroidGuy
Como podemos mudar a fonte do texto da mensagem SMS
jyomin
5

Usar

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList");
Harinder
fonte
1
Isso funciona para mim com o aplicativo de ações, por exemplo, no emulador, mas provavelmente não funciona no Galaxy S3, por exemplo.
G. Lombard
1
@ G.Lombard Lombard Sim, este código não está funcionando no s3. alguma solução para s3?
Vivek Kumar Srivastava
4

Eu uso:

Intent sendIntent = new Intent(Intent.ACTION_MAIN);
sendIntent.putExtra("sms_body", "text");
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);
Delgado
fonte
4
Intent eventIntentMessage =getPackageManager()
 .getLaunchIntentForPackage(Telephony.Sms.getDefaultSmsPackage(getApplicationContext));
startActivity(eventIntentMessage);
Vinayak V Naik
fonte
Para SDK_INT> = 19 (onde esta API está disponível), ela funciona. Na verdade é a única solução trabalhando no meu Nexus 6 com Nougat se você quiser aplicativo sms aberto com lista de mensagens
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
}

Melhor maneira de fazer isso.

BuffMcBigHuge
fonte
Somente este código funciona para mim ... No entanto, como evitar a seleção de vários aplicativos sms ... somente o padrão será iniciado ..
Mahbubur Rahman Khan 12/03
3

Você pode abrir o aplicativo sms padrão e passar os detalhes conforme abaixo:
Nota: Se você quiser enviar para muitos números, separe cada número com ";" corda interna

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);

Ou Use esta função:

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); 
}
Sujay UN
fonte
Isso mostra duas opções: 1. hangout e 2. aplicativo de mensagem padrão. Quero abrir com força o aplicativo de mensagens do Android. Como podemos arquivar isso?
Milind Mevada
3

No kotlin, isso pode ser implementado facilmente da seguinte maneira:

/**
 * 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)
    }
}

Esta é uma resposta modificada de @mustafasevgi

Nux
fonte
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);
Reetpreet Brar
fonte
2

O melhor código que funciona com o aplicativo SMS padrão é.

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);
Junaid Khan
fonte
1

O código abaixo funciona no Android 6.0.
Ele abrirá a atividade de pesquisa no aplicativo de mensagens padrão com as conversas relacionadas à sequência específica fornecida.

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);  

Você pode iniciar a atividade de pesquisa com uma intenção. Isso abrirá a atividade de pesquisa do aplicativo de mensagens padrão. Agora, para mostrar uma lista de conversas específicas na atividade de pesquisa, você pode fornecer a string de pesquisa como string extra com a tecla

"intent_extra_data_key"

como é mostrado no onCreate desta classe

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;

Você também pode passar o SENDER_ADDRESS do sms como uma string extra, que listará todas as conversas com esse endereço de remetente específico.

Verifique com.android.mms.ui.SearchActivity para obter mais informações

Você também pode verificar esta resposta

sissyphus_69
fonte
0

no emulador este trabalho para mim

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);

fonte
0

Intenção de SMS:

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

Redigir SMS:

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);

fonte
0

Ou você pode usar isso, ambos estão funcionando bem no android acima de 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);

ou

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

Você pode usar o seguinte snippet de código para atingir sua meta:

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);

Se você não deseja nenhum texto, remova a chave sms_body.

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:"+shopkepperDataModel.getPhoneNo().trim()));
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(smsIntent);
Vishv Shroff
fonte