Android - SMS senden
In Android können Sie die SmsManager-API oder die integrierte SMS-Anwendung des Geräts zum Senden von SMS verwenden. In diesem Tutorial zeigen wir Ihnen zwei grundlegende Beispiele zum Senden von SMS-Nachrichten:
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);
Natürlich brauchen beide SEND_SMS permission.
<uses-permission android:name="android.permission.SEND_SMS" />
Abgesehen von der obigen Methode stehen in der SmsManager-Klasse nur wenige andere wichtige Funktionen zur Verfügung. Diese Methoden sind unten aufgeführt -
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | ArrayList<String> divideMessage(String text) Diese Methode unterteilt einen Nachrichtentext in mehrere Fragmente, von denen keines größer als die maximale SMS-Nachrichtengröße ist. |
2 | static SmsManager getDefault() Diese Methode wird verwendet, um die Standardinstanz des SmsManager abzurufen |
3 | void sendDataMessage(String destinationAddress, String scAddress, short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) Diese Methode wird verwendet, um eine datenbasierte SMS an einen bestimmten Anwendungsport zu senden. |
4 | void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) Senden Sie eine mehrteilige textbasierte SMS. |
5 | void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) Senden Sie eine textbasierte SMS. |
Beispiel
Das folgende Beispiel zeigt Ihnen in der Praxis, wie Sie mit dem SmsManager-Objekt eine SMS an die angegebene Handynummer senden.
Um mit diesem Beispiel zu experimentieren, benötigen Sie ein aktuelles Mobilgerät, das mit dem neuesten Android-Betriebssystem ausgestattet ist. Andernfalls müssen Sie mit dem Emulator kämpfen, der möglicherweise nicht funktioniert.
Schritt | Beschreibung |
---|---|
1 | Mit Android Studio IDE erstellen Sie eine Android-Anwendung und benennen sie als Tutorialspoint unter einem Paket com.example.tutorialspoint . |
2 | Ändern src / MainActivity.java Datei und fügen Sie erforderlichen Code Pflege SMS senden zu nehmen. |
3 | Ändern Sie die Layout-XML-Datei res / layout / activity_main.xml und fügen Sie bei Bedarf eine beliebige GUI-Komponente hinzu. Ich füge eine einfache Benutzeroberfläche hinzu, um die zu sendende Handynummer und den zu sendenden SMS-Text zu übernehmen, und eine einfache Schaltfläche zum Senden von SMS. |
4 | Es ist nicht erforderlich, Standardzeichenfolgenkonstanten unter res / values / strings.xml zu definieren. Android Studio kümmert sich um Standardkonstanten. |
5 | Modify AndroidManifest.xml wie unten gezeigt |
6 | Führen Sie die Anwendung aus, um den Android-Emulator zu starten, und überprüfen Sie das Ergebnis der in der Anwendung vorgenommenen Änderungen. |
Es folgt der Inhalt der geänderten Hauptaktivitätsdatei 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;
}
}
}
}
}
Es folgt der Inhalt von res/layout/activity_main.xml Datei -
Hier zeigt abc das Tutorialspoint-Logo an
<?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>
Es folgt der Inhalt von res/values/strings.xml zwei neue Konstanten definieren -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">tutorialspoint</string>
</resources>
Es folgt der Standardinhalt von 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>
Lassen Sie uns versuchen, Ihre auszuführen tutorialspointAnwendung. Ich gehe davon aus, dass Sie Ihr aktuelles Android Mobile-Gerät mit Ihrem Computer verbunden haben. Um die App von Android Studio aus auszuführen, öffnen Sie eine der Aktivitätsdateien Ihres Projekts und klicken Sie in
Jetzt können Sie eine gewünschte Handynummer und eine Textnachricht eingeben, die an diese Nummer gesendet werden soll. Zum Schluss klicken Sie aufSend SMSSchaltfläche zum Senden Ihrer SMS. Stellen Sie sicher, dass Ihre GSM / CDMA-Verbindung ordnungsgemäß funktioniert, um Ihre SMS an den Empfänger zu senden.
Sie können eine durch Komma getrennte Anzahl von SMS nehmen und diese dann in Ihrem Programm in eine Array-Zeichenfolge zerlegen. Schließlich können Sie eine Schleife verwenden, um eine Nachricht an alle angegebenen Nummern zu senden. So können Sie Ihren eigenen SMS-Client schreiben. Im nächsten Abschnitt erfahren Sie, wie Sie den vorhandenen SMS-Client zum Senden von SMS verwenden.
Verwenden der integrierten Absicht zum Senden von SMS
Sie können Android Intent zum Senden von SMS verwenden, indem Sie die integrierte SMS-Funktion von Android aufrufen. Im folgenden Abschnitt werden verschiedene Teile unseres Intent-Objekts erläutert, die zum Senden einer SMS erforderlich sind.
Absichtsobjekt - Aktion zum Senden von SMS
Du wirst benutzen ACTION_VIEWAktion zum Starten eines auf Ihrem Android-Gerät installierten SMS-Clients. Es folgt eine einfache Syntax zum Erstellen einer Absicht mit der Aktion ACTION_VIEW.
Intent smsIntent = new Intent(Intent.ACTION_VIEW);
Absichtsobjekt - Daten / Typ zum Senden von SMS
Um eine SMS zu senden, müssen Sie angeben smsto: als URI mit setData () -Methode und Datentyp wird zu vnd.android-dir/mms-sms Verwenden der setType () -Methode wie folgt:
smsIntent.setData(Uri.parse("smsto:"));
smsIntent.setType("vnd.android-dir/mms-sms");
Absichtsobjekt - Extra zum Senden von SMS
Android verfügt über eine integrierte Unterstützung zum Hinzufügen von Telefonnummer und Textnachricht zum Senden einer SMS wie folgt:
smsIntent.putExtra("address" , new String("0123456789;3393993300"));
smsIntent.putExtra("sms_body" , "Test SMS to Angilla");
Hier unterscheiden Adresse und sms_body zwischen Groß- und Kleinschreibung und sollten nur in kleinen Zeichen angegeben werden. Sie können mehr als eine Zahl in einer einzelnen Zeichenfolge angeben, die jedoch durch ein Semikolon (;) getrennt ist.
Beispiel
Das folgende Beispiel zeigt Ihnen in der Praxis, wie Sie mit dem Intent-Objekt den SMS-Client starten, um eine SMS an die angegebenen Empfänger zu senden.
Um mit diesem Beispiel zu experimentieren, benötigen Sie ein aktuelles Mobilgerät, das mit dem neuesten Android-Betriebssystem ausgestattet ist. Andernfalls müssen Sie mit dem Emulator kämpfen, der möglicherweise nicht funktioniert.
Schritt | Beschreibung |
---|---|
1 | Mit der Android Studio IDE erstellen Sie eine Android-Anwendung und benennen sie als Tutorialspoint unter einem Paket com.example.tutorialspoint . |
2 | Ändern src / MainActivity.java Datei und fügen Sie erforderlichen Code Pflege SMS senden zu nehmen. |
3 | Ändern Sie die Layout-XML-Datei res / layout / activity_main.xml und fügen Sie bei Bedarf eine beliebige GUI-Komponente hinzu. Ich füge eine einfache Schaltfläche hinzu, um den SMS-Client zu starten. |
4 | Standardkonstanten müssen nicht definiert werden. Android Studio kümmert sich um Standardkonstanten. |
5 | Modify AndroidManifest.xml wie unten gezeigt |
6 | Führen Sie die Anwendung aus, um den Android-Emulator zu starten, und überprüfen Sie das Ergebnis der in der Anwendung vorgenommenen Änderungen. |
Es folgt der Inhalt der geänderten Hauptaktivitätsdatei 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;
}
}
Es folgt der Inhalt von res/layout/activity_main.xml Datei -
Hier zeigt abc das Tutorialspoint-Logo an
<?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>
Es folgt der Inhalt von res/values/strings.xml zwei neue Konstanten definieren -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">tutorialspoint</string>
</resources>
Es folgt der Standardinhalt von 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>
Lassen Sie uns versuchen, Ihre auszuführen tutorialspointAnwendung. Ich gehe davon aus, dass Sie Ihr aktuelles Android Mobile-Gerät mit Ihrem Computer verbunden haben. Um die App von Android Studio aus auszuführen, öffnen Sie eine der Aktivitätsdateien Ihres Projekts und klicken Sie in
Wählen Sie Ihr Mobilgerät als Option aus und überprüfen Sie Ihr Mobilgerät, das den folgenden Bildschirm anzeigt:
Jetzt benutzen Compose SMS Schaltfläche zum Starten der in Android integrierten SMS-Clients (siehe unten) -
Sie können eines der angegebenen Standardfelder ändern und schließlich die Schaltfläche SMS senden verwenden, um Ihre SMS an den genannten Empfänger zu senden.