meluncurkan aplikasi sms dengan maksud

144

Saya punya pertanyaan tentang maksud ... Saya mencoba meluncurkan aplikasi 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);

jadi, Anda dapat melihat bahwa saya menaruh terlalu banyak hal dalam niat saya, tetapi itu karena saya tidak tahu bagaimana saya bisa melakukan ... Terima kasih

Olivier69
sumber
1
Checkout gist.github.com/gelldur/9c199654c91b13478979 Anda dapat berbagi melalui aplikasi SMS
Dawid Drozd

Jawaban:

238

Untuk memulai aktivitas sms, Anda hanya perlu ini:

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

Anda dapat menambahkan ekstra untuk mengisi pesan Anda sendiri dan semacamnya

sendIntent.putExtra("sms_body", x); 

maka mulai sajaAktivitas dengan maksud.

startActivity(sendIntent);
jqpubliq
sumber
Saya mencoba, tetapi ketika saya menulis persis apa yang Anda berikan, gerhana konsol kembali (saat mengkompilasi) "Tidak ada aktivitas Launcher ditemukan!"
Olivier69
oke, apakah Anda memiliki aktivitas dengan atribut berikut di filter maksudnya di manifes Anda? <action android: name = "android.intent.action.MAIN" /> <kategori android: name = "android.intent.category.LAUNCHER" />
jqpubliq
pada kenyataannya, peluncuran berasal dari appwidgetactivity. Perh'aps itu datang dari sini, saya meletakkan apa yang telah Anda lakukan dalam manifes dan tidak ada yang terjadi ... Saya telah menguji tombol saya dengan fungsi lain dan yang ini tidak ingin pergi !!
Olivier69
22
untuk secara otomatis memasukkan nomor telepon dalam kotak 'ke', ubah baris kode sendIntent.setData(Uri.parse("sms:" + phoneNumber));setData ke (terima kasih jqpubliq dan jaydeepw)
tmr
2
saya perlu memeriksa SMS yang dikirim atau tidak ketika pengguna akan mengirim sms dari aplikasi saya melalui Intent ti sms bagaimana saya bisa melakukan ini?
pengguna
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
sumber
4
Solusi terbaik! Terima kasih!
Nick
20
Ketahuilah, ini tidak akan berfungsi untuk Android 4.4 dan mungkin naik ... "vnd.android-dir / mms-sms" tidak lagi didukung
Max Ch
2
Baru saja diuji pada Android 4.4.2 dan ini berfungsi. Bisakah Anda menautkan saya ke pengumuman itu? @ MaxCh
theknut
3
Jika nomor telepon tidak ditambahkan seperti dalam kasus saya, tambahkan saja: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

Jika versi Android adalah Kitkat atau lebih tinggi, pengguna dapat mengubah aplikasi sms default. Metode ini akan mendapatkan aplikasi sms default dan memulai aplikasi sms default.

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
sumber
2
Saya menggunakan versi KitKat. Saya ingin mengatur nomor penerima di bidang Ke. Bagaimana saya bisa mengaturnya?
Karthikeyan Ve
3
@KarthikeyanVe, bisakah Anda mencoba? Intent sendIntent = Intent baru (Intent.ACTION_SENDTO); sendIntent.setData (Uri.parse ("smsto: phonenumber"));
android_developer
Saya mencoba. Ini bekerja dengan baik. Tetapi ketika saya mengklik tombol kembali dari aplikasi pesan, itu juga menutup aplikasi saya. Jika saya kembali ditekan dari aplikasi pesan, itu akan kembali ke aplikasi tempat saya pergi.
Karthikeyan Ve
2
Jawaban yang bagus Gunakan jika Anda ingin langsung ke aplikasi SMS default, berfungsi seperti mantra. Jika Anda ingin pemilih, lihat jawaban lain di sini.
Nemanja Kovacevic
1
mengapa aplikasi tutup ketika saya kembali dari pesan
Muhammad Younas
31
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);

Itu yang kamu butuhkan.

langit
sumber
kode berfungsi di Android 4.2.2, ini membuka tampilan daftar untuk sms. itu yang saya butuhkan !!!
VISHAL VIRADIA
22

Jika Anda ingin meluncurkan aktivitas Menulis SMS dari beberapa aktivitas Anda yang lain dan Anda juga harus memasukkan nomor telepon dan teks SMS, maka gunakan kode ini:

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

Catatan: di sini tombol sms_bodydan smsto:untuk mengenali teks dan telepon tidak ada di aktivitas menulis SMS, jadi hati-hati di sini.

Pir Fahim Shah
sumber
aplikasi dekat ketika mulai niat pesan atau ketika saya menekan kembali aplikasi kunci ditutup
Muhammad Younas
Pertama-tama beri tahu saya ketika Anda menjalankan kode ini kemudian apakah itu membuka fungsi menulis sms, Jika aplikasi tutup setelah menekan tombol kembali maka akan ada beberapa masalah dalam kode Anda, terutama di public void BackPressed () {} fungsi seperti ini
Pir Fahim Shah
saya tidak menimpa Fungsi BackPresed
Muhammad Younas
17

Berikut adalah kode yang akan membuka aktivitas SMS yang sudah diisi sebelumnya dengan nomor telepon yang harus dikirimi SMS. Ini berfungsi baik pada emulator maupun perangkat .

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
sumber
1
bagaimana saya bisa melampirkan gambar ke pesan ini?
unresolved_external
Saya hv 1 pertanyaan tentang ini, jika kita melihat kode kerangka kerja, setType () membuat data sebagai null & setData () menjadikan tipe sebagai nol. Jadi, bagaimana tipe akan tetap ada dalam kasus ini?
AndroidGuy
bagaimana kita dapat mengubah font teks dalam sms
jyomin
5

Menggunakan

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList");
Harinder
sumber
1
Ini berfungsi untuk saya dengan aplikasi stok misalnya pada emulator, tetapi mungkin tidak bekerja pada Galaxy S3 misalnya.
G. Lombard
1
@ G.Lombard Lombard Ya kode ini tidak berfungsi pada s3. ada solusi untuk s3?
Vivek Kumar Srivastava
4

Saya menggunakan:

Intent sendIntent = new Intent(Intent.ACTION_MAIN);
sendIntent.putExtra("sms_body", "text");
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);
Delgado
sumber
4
Intent eventIntentMessage =getPackageManager()
 .getLaunchIntentForPackage(Telephony.Sms.getDefaultSmsPackage(getApplicationContext));
startActivity(eventIntentMessage);
Vinayak V Naik
sumber
Untuk SDK_INT> = 19 (di mana api ini tersedia) ia berfungsi. Sebenarnya adalah satu-satunya solusi yang berfungsi di Nexus 6 saya dengan Nougat jika Anda ingin membuka aplikasi sms dengan daftar pesan
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
}

Cara terbaik untuk melakukan ini.

BuffMcBigHuge
sumber
Hanya kode ini yang berfungsi untuk saya ... Namun bagaimana cara menghindari pemilihan beberapa aplikasi sms ... hanya default yang akan dimulai ..
Mahbubur Rahman Khan
3

Anda dapat membuka Aplikasi sms default dan memberikan rincian seperti di bawah ini:
Catatan: Jika Anda ingin mengirim ke banyak nomor, pisahkan setiap nomor dengan ";" di dalam string

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

| Atau | Gunakan fungsi ini:

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
sumber
Ini menunjukkan dua opsi, 1. hangout dan 2. aplikasi pesan default. Saya ingin membuka aplikasi pesan Android dengan paksa. Bagaimana kita mengarsipkannya?
Milind Mevada
3

Di kotlin ini dapat diimplementasikan dengan mudah sebagai berikut:

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

Ini adalah jawaban modifikasi dari @mustafasevgi

Nux
sumber
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
sumber
2

Kode terbaik yang berfungsi dengan aplikasi SMS Default adalah.

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
sumber
1

Kode di bawah ini berfungsi di Android 6.0.
Ini akan membuka aktivitas pencarian di aplikasi pesan default dengan percakapan yang terkait dengan string spesifik yang disediakan.

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

Anda dapat memulai aktivitas pencarian dengan niat. Ini akan membuka aktivitas pencarian aplikasi perpesanan default. Sekarang, untuk menampilkan daftar percakapan tertentu dalam aktivitas pencarian, Anda dapat memberikan string pencarian sebagai string tambahan dengan kunci sebagai

"intent_extra_data_key"

seperti yang ditunjukkan pada onCreate dari kelas ini

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;

Anda juga dapat meneruskan SENDER_ADDRESS dari sms sebagai string ekstra, yang akan mencantumkan semua percakapan dengan alamat pengirim tertentu.

Periksa com.android.mms.ui.SearchActivity untuk informasi lebih lanjut

Anda juga dapat memeriksa jawaban ini

sissyphus_69
sumber
0

pada emulator ini berfungsi untuk saya

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

sumber
0

Maksud Sms:

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

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

sumber
0

Anda dapat menggunakan ini, keduanya bekerja dengan baik di Android di atas 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);

atau

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

Anda dapat menggunakan cuplikan kode berikut untuk mencapai tujuan Anda:

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

Jika Anda tidak ingin teks apa pun, hapus kunci 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
sumber