Android - SMS Gönderme

Android'de SMS göndermek için SmsManager API veya cihazların Dahili SMS uygulamasını kullanabilirsiniz. Bu eğiticide, size SMS mesajı göndermek için iki temel örnek gösteriyoruz -

SmsManager API

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("phoneNo", null, "sms message", null, null);

Built-in SMS application

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

Tabii ki ikisinin de ihtiyacı var SEND_SMS permission.

<uses-permission android:name="android.permission.SEND_SMS" />

Yukarıdaki yöntemin dışında, SmsManager sınıfında birkaç önemli işlev daha vardır. Bu yöntemler aşağıda listelenmiştir -

Sr.No. Yöntem ve Açıklama
1

ArrayList<String> divideMessage(String text)

Bu yöntem, bir mesaj metnini, hiçbiri maksimum SMS mesajı boyutundan büyük olmayan birkaç parçaya böler.

2

static SmsManager getDefault()

Bu yöntem, SmsManager'ın varsayılan örneğini almak için kullanılır.

3

void sendDataMessage(String destinationAddress, String scAddress, short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent)

Bu yöntem, belirli bir uygulama portuna veri tabanlı bir SMS göndermek için kullanılır.

4

void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents)

Çok parçalı metin tabanlı bir SMS gönderin.

5

void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)

Metin tabanlı bir SMS gönderin.

Misal

Aşağıdaki örnek, verilen cep telefonu numarasına bir SMS göndermek için SmsManager nesnesinin nasıl kullanılacağını pratik olarak göstermektedir.

Bu örneği denemek için, en son Android işletim sistemi ile donatılmış gerçek bir Mobil cihaza ihtiyacınız olacak, aksi takdirde çalışmayabilecek emülatörle uğraşmanız gerekecektir.
Adım Açıklama
1 Bir Android uygulaması oluşturmak için Android Studio IDE'yi kullanacak ve bunu com.example.tutorialspoint paketi altında öğretici noktası olarak adlandıracaksınız .
2 Src / MainActivity.java dosyasını değiştirin ve sms göndermeyle ilgilenmek için gerekli kodu ekleyin.
3 Düzen XML dosyasını değiştirin res / layout / activity_main.xml gerekirse herhangi bir GUI bileşeni ekleyin. Gönderilecek cep telefonu numarasını ve SMS metnini almak için basit bir GUI ve SMS göndermek için basit bir düğme ekliyorum.
4 Res / values ​​/ strings.xml'de varsayılan dize sabitlerini tanımlamaya gerek yok. Android stüdyosu varsayılan sabitlerle ilgilenir.
5 AndroidManifest.xml'yi aşağıda gösterildiği gibi değiştirin
6 Android öykünücüsünü başlatmak ve uygulamada yapılan değişikliklerin sonucunu doğrulamak için uygulamayı çalıştırın.

Aşağıda, değiştirilen ana aktivite dosyasının içeriği yer almaktadır src/com.example.tutorialspoint/MainActivity.java.

package com.example.tutorialspoint;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.app.Activity;

import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.telephony.SmsManager;

import android.util.Log;
import android.view.Menu;
import android.view.View;

import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
   private static final int MY_PERMISSIONS_REQUEST_SEND_SMS =0 ;
   Button sendBtn;
   EditText txtphoneNo;
   EditText txtMessage;
   String phoneNo;
   String message;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      sendBtn = (Button) findViewById(R.id.btnSendSMS);
      txtphoneNo = (EditText) findViewById(R.id.editText);
      txtMessage = (EditText) findViewById(R.id.editText2);

      sendBtn.setOnClickListener(new View.OnClickListener() {
         public void onClick(View view) {
            sendSMSMessage();
         }
      });
   }
	
   protected void sendSMSMessage() {
      phoneNo = txtphoneNo.getText().toString();
      message = txtMessage.getText().toString();
		
      if (ContextCompat.checkSelfPermission(this,
         Manifest.permission.SEND_SMS)
         != PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
               Manifest.permission.SEND_SMS)) {
            } else {
               ActivityCompat.requestPermissions(this,
                  new String[]{Manifest.permission.SEND_SMS},
                  MY_PERMISSIONS_REQUEST_SEND_SMS);
            }
      }
   }
	
   @Override
   public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
      switch (requestCode) {
         case MY_PERMISSIONS_REQUEST_SEND_SMS: {
            if (grantResults.length > 0
               && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                  SmsManager smsManager = SmsManager.getDefault();
                  smsManager.sendTextMessage(phoneNo, null, message, null, null);
                  Toast.makeText(getApplicationContext(), "SMS sent.", 
                     Toast.LENGTH_LONG).show();
            } else {
               Toast.makeText(getApplicationContext(), 
                  "SMS faild, please try again.", Toast.LENGTH_LONG).show();
               return;
            }
         }
      }

   }
}

Aşağıdakilerin içeriği olacak res/layout/activity_main.xml dosya -

Burada abc, tutorialspoint logosu hakkında bilgi verir
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="MainActivity">

   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Sending SMS Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />
      
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:hint="Enter Phone Number"
      android:phoneNumber="true"
      android:textColorHint="@color/abc_primary_text_material_dark"
      android:layout_below="@+id/imageButton"
      android:layout_centerHorizontal="true" />

   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText2"
      android:layout_below="@+id/editText"
      android:layout_alignLeft="@+id/editText"
      android:layout_alignStart="@+id/editText"
      android:textColorHint="@color/abc_primary_text_material_dark"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton"
      android:hint="Enter SMS" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Send Sms"
      android:id="@+id/btnSendSMS"
      android:layout_below="@+id/editText2"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="48dp" />

</RelativeLayout>

Aşağıdakilerin içeriği olacak res/values/strings.xml iki yeni sabit tanımlamak için -

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">tutorialspoint</string>
</resources>

Aşağıdaki varsayılan içeriktir AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint" >
  
   <uses-permission android:name="android.permission.SEND_SMS" />
   
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.tutorialspoint.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

Hadi çalıştırmayı deneyelim tutorialspointuygulama. Gerçek Android Mobil cihazınızı bilgisayarınıza bağladığınızı varsayıyorum. Uygulamayı Android stüdyosundan çalıştırmak için, projenizin etkinlik dosyalarından birini açın

ve araç çubuğundan Çalıştır simgesine tıklayın . Uygulamanızı başlatmadan önce, Android stüdyo yükleyici, Android uygulamanızı çalıştırmak istediğiniz bir seçeneği seçmek için aşağıdaki pencereyi görüntüleyecektir.

Şimdi istediğiniz bir cep telefonu numarasını ve bu numaraya gönderilecek bir metin mesajını girebilirsiniz. Sonunda tıklayınSend SMSSMS'inizi göndermek için düğmesine basın. SMS'inizi alıcısına teslim etmek için GSM / CDMA bağlantınızın düzgün çalıştığından emin olun.

Virgülle ayrılmış bir dizi SMS alabilir ve ardından programınızın içinde bunları bir dizi dizisine ayrıştırmanız gerekecek ve son olarak verilen tüm numaralara mesaj göndermek için bir döngü kullanabilirsiniz. Kendi SMS istemcinizi bu şekilde yazabilirsiniz. Sonraki bölüm, SMS göndermek için mevcut SMS istemcisini nasıl kullanacağınızı gösterecektir.

SMS göndermek için Yerleşik Niyeti kullanma

Android'in yerleşik SMS işlevini arayarak SMS göndermek için Android Intent'i kullanabilirsiniz. Aşağıdaki bölüm, SMS göndermek için gerekli olan Niyet nesnemizin farklı bölümlerini açıklamaktadır.

Amaç Nesnesi - SMS gönderme eylemi

Kullanacaksın ACTION_VIEWAndroid cihazınızda yüklü bir SMS istemcisini başlatmak için eylem. Aşağıda, ACTION_VIEW eylemiyle bir amaç oluşturmak için basit sözdizimi verilmiştir.

Intent smsIntent = new Intent(Intent.ACTION_VIEW);

Amaç Nesnesi - SMS göndermek için Veri / Tür

SMS göndermek için belirtmeniz gerekir smsto: setData () yöntemini kullanan URI olarak ve veri türü vnd.android-dir/mms-sms setType () yöntemini aşağıdaki gibi kullanarak -

smsIntent.setData(Uri.parse("smsto:"));
smsIntent.setType("vnd.android-dir/mms-sms");

Amaç Nesnesi - SMS göndermek için ekstra

Android, aşağıdaki gibi bir SMS göndermek için telefon numarası ve kısa mesaj eklemek için yerleşik desteğe sahiptir -

smsIntent.putExtra("address"  , new String("0123456789;3393993300"));
smsIntent.putExtra("sms_body"  , "Test SMS to Angilla");
Burada adres ve sms_body büyük / küçük harfe duyarlıdır ve yalnızca küçük karakterlerle belirtilmelidir. Tek bir dizede birden fazla sayı belirtebilir, ancak noktalı virgülle (;) ayırabilirsiniz.

Misal

Aşağıdaki örnek, verilen alıcılara bir SMS göndermek üzere SMS istemcisini başlatmak için Amaç nesnesini pratik olarak nasıl kullanacağınızı göstermektedir.

Bu örneği denemek için, en son Android işletim sistemi ile donatılmış gerçek bir Mobil cihaza ihtiyacınız olacak, aksi takdirde çalışmayabilecek emülatörle uğraşmanız gerekecektir.
Adım Açıklama
1 Bir Android uygulaması oluşturmak için Android studio IDE'yi kullanacak ve bunu com.example.tutorialspoint paketinin altında öğretici noktası olarak adlandıracaksınız .
2 Src / MainActivity.java dosyasını değiştirin ve SMS gönderimi ile ilgilenmek için gerekli kodu ekleyin.
3 Düzen XML dosyasını değiştirin res / layout / activity_main.xml gerekirse herhangi bir GUI bileşeni ekleyin. SMS İstemcisini başlatmak için basit bir düğme ekliyorum.
4 Varsayılan sabitleri tanımlamaya gerek yoktur. Android Studio, varsayılan sabitlerle ilgilenir.
5 AndroidManifest.xml'yi aşağıda gösterildiği gibi değiştirin
6 Android öykünücüsünü başlatmak ve uygulamada yapılan değişikliklerin sonucunu doğrulamak için uygulamayı çalıştırın.

Aşağıda, değiştirilen ana aktivite dosyasının içeriği yer almaktadır src/com.example.tutorialspoint/MainActivity.java.

package com.example.tutorialspoint;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      Button startBtn = (Button) findViewById(R.id.button);
      startBtn.setOnClickListener(new View.OnClickListener() {
         public void onClick(View view) {
            sendSMS();
         }
      });
   }
   
   protected void sendSMS() {
      Log.i("Send SMS", "");
      Intent smsIntent = new Intent(Intent.ACTION_VIEW);
      
      smsIntent.setData(Uri.parse("smsto:"));
      smsIntent.setType("vnd.android-dir/mms-sms");
      smsIntent.putExtra("address"  , new String ("01234"));
      smsIntent.putExtra("sms_body"  , "Test ");
      
      try {
         startActivity(smsIntent);
         finish();
         Log.i("Finished sending SMS...", "");
      } catch (android.content.ActivityNotFoundException ex) {
         Toast.makeText(MainActivity.this, 
         "SMS faild, please try again later.", Toast.LENGTH_SHORT).show();
      }
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }
}

Aşağıdakilerin içeriği olacak res/layout/activity_main.xml dosya -

Burada abc, tutorialspoint logosu hakkında bilgi verir
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent" 
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" 
   tools:context=".MainActivity">
   
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Drag and Drop Example"
      android:id="@+id/textView"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials Point "
      android:id="@+id/textView2"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:textSize="30dp"
      android:textColor="#ff14be3c" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_marginTop="48dp"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Compose SMS"
      android:id="@+id/button"
      android:layout_below="@+id/imageView"
      android:layout_alignRight="@+id/textView2"
      android:layout_alignEnd="@+id/textView2"
      android:layout_marginTop="54dp"
      android:layout_alignLeft="@+id/imageView"
      android:layout_alignStart="@+id/imageView" />
      
</RelativeLayout>

Aşağıdakilerin içeriği olacak res/values/strings.xml iki yeni sabit tanımlamak için -

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">tutorialspoint</string>
</resources>

Aşağıdaki varsayılan içeriktir AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint" >
      
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.tutorialspoint.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

Hadi çalıştırmayı deneyelim tutorialspointuygulama. Gerçek Android Mobil cihazınızı bilgisayarınıza bağladığınızı varsayıyorum. Uygulamayı Android stüdyosundan çalıştırmak için, projenizin etkinlik dosyalarından birini açın

ve araç çubuğundan Çalıştır simgesine tıklayın . Uygulamanızı başlatmadan önce, Android stüdyosu Android uygulamanızı çalıştırmak istediğiniz bir seçeneği seçmek için aşağıdaki pencereyi görüntüleyecektir.

Mobil cihazınızı bir seçenek olarak seçin ve ardından aşağıdaki ekranı gösterecek olan mobil cihazınızı kontrol edin -

Şimdi kullan Compose SMS aşağıda gösterilen yerleşik Android SMS istemcilerini başlatmak için düğme -

Verilen varsayılan alanlardan birini değiştirebilir ve son olarak SMS gönder düğmesini belirtilen alıcıya SMS göndermek için kullanabilirsiniz.