sms uygulamasını bir niyetle başlatmak


147

Bir niyetle ilgili bir sorum var ... sms uygulamasını başlatmaya çalışıyorum ...

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

yani, niyetime çok fazla şey koyduğumu görüyorsunuz, ama bunun nedeni nasıl yapabileceğimi bilmiyorum ... Teşekkürler


1
Checkout gist.github.com/gelldur/9c199654c91b13478979 SMS uygulamasıyla paylaşabilirsiniz
Dawid Drozd

Yanıtlar:


242

SMS etkinliğini başlatmak için ihtiyacınız olan tek şey şudur:

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

Kendi mesajınızı vb. Doldurmak için ekstralar ekleyebilirsiniz.

sendIntent.putExtra("sms_body", x); 

sonra sadece niyetle Aktiviteyi başlatın.

startActivity(sendIntent);

Denedim ama tam olarak verdiğiniz şeyi yazdığımda tutulma konsolu geri dönüyor (derlerken) "Başlatıcı etkinliği bulunamadı!"
Olivier69

tamam, bildiriminizdeki niyet filtresinde aşağıdaki niteliklere sahip bir etkinliğiniz var mı? <action android: name = "android.intent.action.MAIN" /> <category android: name = "android.intent.category.LAUNCHER" />
jqpubliq

aslında, lansman bir appwidgetactivity'den geliyor. Muhtemelen buradan geliyor, yaptığınız şeyi bildirime koyuyorum ve hiçbir şey olmuyor ... Düğmemi başka bir işlevle test ettim ve bu gitmek istemiyor !!
Olivier69

22
' sendIntent.setData(Uri.parse("sms:" + phoneNumber));Kime ' kutusuna telefon numarasını otomatik olarak eklemek için setData kod satırını (teşekkür ederim jqpubliq ve jaydeepw) olarak değiştirin
tmr

2
Kullanıcı uygulamamdan Intent ti sms aracılığıyla sms göndereceği zaman SMS gönderilip gönderilmediğini kontrol etmem gerekiyor bunu nasıl yapabilirim?
kullanıcı

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
En iyi çözüm! Teşekkürler!
Nick

20
Bunun android 4.4 ve muhtemelen üstü için çalışmayacağını unutmayın ... "vnd.android-dir / mms-sms" artık desteklenmiyor
Max Ch

2
Sadece Android 4.4.2'de test edildi ve çalışıyor. Lütfen beni bu duyuruya bağlar mısınız? @MaxCh
theknut

3
Telefon numarası benim durumumdaki gibi eklenmediyse şunu eklemeniz yeterli: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

Android sürümü Kitkat veya üzeri ise, kullanıcılar varsayılan sms uygulamasını değiştirebilir. Bu yöntem, varsayılan sms uygulamasını alacak ve varsayılan sms uygulamasını başlatacaktır.

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 sürümünü kullanıyorum. Alıcı alanında alıcı numarasını ayarlamak istiyorum. Bunu nasıl ayarlayabilirim?
Karthikeyan ve

3
@KarthikeyanVe lütfen deneyebilir misin? Amaç sendIntent = new Intent (Intent.ACTION_SENDTO); sendIntent.setData (Uri.parse ("smsto: telefon numarası"));
android_developer

Denedim. İyi çalışıyor. Ancak mesaj uygulamasından geri düğmesini tıkladığımda, uygulamamı da kapatıyor. Mesaj uygulamasından geri basarsam, bıraktığım yere geri dönmelidir.
Karthikeyan Ve

2
Mükemmel cevap. Doğrudan varsayılan SMS uygulamasına gitmek istiyorsanız kullanın, cazibe gibi çalışır. Seçici istiyorsanız burada diğer cevapları görün.
Nemanja Kovacevic

1
mesajdan döndüğümde neden uygulama
kapanıyor

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

Tek ihtiyacınız olan bu.


kod Android 4.2.2'de çalışıyor, sms için liste görünümünü açar. ihtiyacım olan şey bu !!!
VISHAL VIRADIA

22

Diğer etkinliklerinizden bazılarından SMS Oluşturma etkinliğini başlatmak istiyorsanız ve ayrıca bir telefon numarası ve SMS metni iletmeniz gerekiyorsa, bu kodu kullanın:

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

Not: burada sms_bodyve smsto:SMS oluşturma etkinliğinde metni ve telefonu tanımak için anahtarlar, bu yüzden burada dikkatli olun.


Uygulama, mesaj niyetini başlattığında veya geri tuşuna
bastığımda

Öncelikle bu kodu çalıştırdığınızda bana söyleyin, sonra sms yazma işlevini açar, eğer uygulama geri düğmesine bastıktan sonra kapanırsa, kodunuzda bir sorun olabilir, özellikle de bu gibi public void BackPressed () {} işlevinde
Pir Fahim Shah

BackPresed Functionn
Muhammad

17

SMS'in gönderilmesi gereken telefon numarasıyla önceden doldurulmuş SMS etkinliğini açacak olan kod. Bu, emülatörde ve cihazda iyi çalışır .

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
bu mesaja nasıl resim ekleyebilirim?
unresolved_external

Bununla ilgili hv 1 sorumuz, çerçeve kodunu görürsek, setType () veriyi null yapar & setData () tipi null yapar. Peki bu durumda tür nasıl devam edecek?
AndroidGuy

sms metninin yazı tipini nasıl değiştirebiliriz
jyomin

5

Kullanım

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

1
Bu benim için hisse senedi uygulamasında, örneğin emülatörde çalışıyor, ancak muhtemelen Galaxy S3'te çalışmıyor.
G. Lombard

1
@ G.Lombard Lombard Evet bu kod s3 üzerinde çalışmıyor. s3 için herhangi bir çözüm?
Vivek Kumar Srivastava

4

Kullanırım:

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 için (bu api'nin bulunduğu yerlerde) çalışır. Aslında mesaj listesiyle sms uygulamasını açmak istiyorsanız Nougat ile Nexus
6'mdaki

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
}

Bunu yapmanın en iyi yolu.


Sadece bu kod benim için çalışıyor ... Ancak birden fazla sms uygulamasının seçilmesinden nasıl kaçınılacağı ... yalnızca varsayılan başlayacak ..
Mahbubur Rahman Khan

3

Varsayılan sms Uygulamasını açabilir ve aşağıdaki gibi ayrıntıları iletebilirsiniz:
Not: Çok sayıda numaraya göndermek istiyorsanız, her numarayı ";" ile ayırın. ipin içinde

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

| Veya | Bu işlevi kullanın:

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

Bu, iki seçeneği gösterir: 1. Hangout ve 2. varsayılan mesaj uygulaması. Android mesajlar uygulamasını zorla açmak istiyorum. Bunu nasıl arşivleyebiliriz?
Milind Mevada

3

In KOTLIN şöyle bu kolayca uygulanabilir:

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

Bu, @mustafasevgi'nin değiştirilmiş cevabıdır


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

Varsayılan SMS uygulamasıyla çalışan en iyi kod.

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

Aşağıdaki kod android 6.0'da çalışır.
Varsayılan mesajlaşma uygulamasında, sağlanan belirli diziyle ilgili konuşmalarla arama etkinliğini açacaktır.

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

Arama aktivitesini bir niyetle başlatabilirsiniz. Bu, varsayılan mesajlaşma uygulamasının arama aktivitesini açacaktır. Şimdi, arama etkinliğindeki belirli konuşmaların bir listesini göstermek için, arama dizesini ekstra dize olarak ve aşağıdaki gibi anahtarla sağlayabilirsiniz:

"intent_extra_data_key"

Bu sınıfın onCreate bölümünde gösterildiği gibi

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;

Ayrıca sms'nin SENDER_ADDRESS'ini fazladan dize olarak iletebilirsiniz, bu belirli gönderen adresiyle tüm konuşmaları listeleyecektir.

Kontrol com.android.mms.ui.SearchActivity Daha fazla bilgi için

Bu yanıtı da kontrol edebilirsiniz


0

emülatörde bu benim için çalışıyor

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 Amacı:

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

0

SMS Oluştur:

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

Ya bunu kullanabilirsin, her ikisi de 4.4'ün üzerindeki android üzerinde iyi çalışıyor

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

veya

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

0

Hedefinize ulaşmak için aşağıdaki kod parçacığını kullanabilirsiniz:

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

Herhangi bir metin istemiyorsanız sms_body anahtarını kaldırın.

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:"+shopkepperDataModel.getPhoneNo().trim()));
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(smsIntent);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.