Android - wysyłanie wiadomości SMS
W systemie Android możesz użyć SmsManager API lub urządzeń Wbudowana aplikacja SMS do wysyłania SMS-ów. W tym samouczku pokazujemy dwa podstawowe przykłady wysyłania wiadomości SMS -
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);
Oczywiście oboje potrzebują SEND_SMS permission.
<uses-permission android:name="android.permission.SEND_SMS" />
Oprócz powyższej metody w klasie SmsManager dostępnych jest kilka innych ważnych funkcji. Te metody są wymienione poniżej -
Sr.No. | Metoda i opis |
---|---|
1 | ArrayList<String> divideMessage(String text) Ta metoda dzieli tekst wiadomości na kilka fragmentów, nie większych niż maksymalny rozmiar wiadomości SMS. |
2 | static SmsManager getDefault() Ta metoda jest używana do pobrania domyślnej instancji SmsManager |
3 | void sendDataMessage(String destinationAddress, String scAddress, short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) Ta metoda służy do wysyłania wiadomości SMS na podstawie danych do określonego portu aplikacji. |
4 | void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) Wyślij wieloczęściową wiadomość SMS. |
5 | void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) Wyślij SMS-a tekstowego. |
Przykład
Poniższy przykład pokazuje w praktyce, jak używać obiektu SmsManager do wysyłania wiadomości SMS na podany numer telefonu komórkowego.
Aby poeksperymentować z tym przykładem, będziesz potrzebować rzeczywistego urządzenia mobilnego wyposażonego w najnowszy system operacyjny Android, w przeciwnym razie będziesz musiał zmagać się z emulatorem, który może nie działać.
Krok | Opis |
---|---|
1 | Użyjesz Android Studio IDE do stworzenia aplikacji na Androida i nazwij ją jako tutorialspoint w pakiecie com.example.tutorialspoint . |
2 | Zmodyfikuj plik src / MainActivity.java i dodaj wymagany kod, aby zająć się wysyłaniem smsów. |
3 | Zmodyfikuj plik XML układu res / layout / activity_main.xml, dodaj dowolny komponent GUI, jeśli jest to wymagane. Dodaję prosty GUI, aby pobrać numer telefonu komórkowego i tekst SMS do wysłania oraz prosty przycisk do wysyłania wiadomości SMS. |
4 | Nie ma potrzeby definiowania domyślnych stałych łańcuchowych w res / values / strings.xml. Android studio dba o domyślne stałe. |
5 | Zmodyfikuj plik AndroidManifest.xml, jak pokazano poniżej |
6 | Uruchom aplikację, aby uruchomić emulator Androida i zweryfikować wynik zmian wprowadzonych w aplikacji. |
Poniżej znajduje się zawartość zmodyfikowanego pliku głównego działania 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;
}
}
}
}
}
Poniżej będzie treść res/layout/activity_main.xml plik -
Tutaj abc wskazuje na logo tutorialspoint
<?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>
Poniżej będzie treść res/values/strings.xml zdefiniować dwie nowe stałe -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">tutorialspoint</string>
</resources>
Poniżej znajduje się domyślna zawartość 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>
Spróbujmy uruchomić Twój tutorialspointpodanie. Zakładam, że podłączyłeś swoje rzeczywiste urządzenie mobilne z systemem Android do komputera. Aby uruchomić aplikację ze studia Android, otwórz jeden z plików aktywności projektu i kliknij
Teraz możesz wprowadzić żądany numer telefonu komórkowego i wiadomość tekstową, która ma zostać wysłana na ten numer. Na koniec kliknijSend SMSprzycisk, aby wysłać wiadomość SMS. Upewnij się, że połączenie GSM / CDMA działa prawidłowo, aby dostarczyć SMS-a do odbiorcy.
Możesz wziąć kilka SMS-ów oddzielonych przecinkami, a następnie w programie będziesz musiał przeanalizować je w łańcuch tablicy, a na koniec możesz użyć pętli do wysłania wiadomości na wszystkie podane numery. W ten sposób możesz napisać własnego klienta SMS. W następnej sekcji pokażemy, jak używać istniejącego klienta SMS do wysyłania wiadomości SMS.
Używanie wbudowanej intencji do wysyłania wiadomości SMS
Możesz użyć Android Intent do wysyłania wiadomości SMS, dzwoniąc do wbudowanej funkcji SMS systemu Android. Poniższa sekcja wyjaśnia różne części naszego obiektu intencji wymagane do wysłania wiadomości SMS.
Cel - akcja wysyłania wiadomości SMS
Będziesz używać ACTION_VIEWdziałanie, aby uruchomić klienta SMS zainstalowanego na urządzeniu z systemem Android. Poniżej przedstawiono prostą składnię tworzenia intencji z akcją ACTION_VIEW.
Intent smsIntent = new Intent(Intent.ACTION_VIEW);
Obiekt zamiaru - dane / typ do wysłania wiadomości SMS
Aby wysłać wiadomość SMS, musisz określić smsto: jako URI przy użyciu metody setData () i typu danych to vnd.android-dir/mms-sms używając metody setType () w następujący sposób -
smsIntent.setData(Uri.parse("smsto:"));
smsIntent.setType("vnd.android-dir/mms-sms");
Obiekt intencji - dodatkowy do wysyłania wiadomości SMS
Android ma wbudowaną obsługę dodawania numeru telefonu i wiadomości tekstowej w celu wysłania wiadomości SMS w następujący sposób -
smsIntent.putExtra("address" , new String("0123456789;3393993300"));
smsIntent.putExtra("sms_body" , "Test SMS to Angilla");
Tutaj adres i sms_body są wrażliwe na wielkość liter i powinny być podane tylko małymi znakami. W jednym ciągu można podać więcej niż jedną liczbę, ale oddzielone średnikiem (;).
Przykład
Poniższy przykład pokazuje w praktyce, jak użyć obiektu Intent do uruchomienia klienta SMS w celu wysłania wiadomości SMS do podanych odbiorców.
Aby poeksperymentować z tym przykładem, będziesz potrzebować rzeczywistego urządzenia mobilnego wyposażonego w najnowszy system operacyjny Android, w przeciwnym razie będziesz musiał zmagać się z emulatorem, który może nie działać.
Krok | Opis |
---|---|
1 | Użyjesz Android Studio IDE do stworzenia aplikacji na Androida i nazwij ją jako tutorialspoint w pakiecie com.example.tutorialspoint . |
2 | Zmodyfikuj plik src / MainActivity.java i dodaj wymagany kod, aby zająć się wysyłaniem wiadomości SMS. |
3 | Zmodyfikuj plik XML układu res / layout / activity_main.xml, dodaj dowolny komponent GUI, jeśli jest to wymagane. Dodam prosty przycisk do uruchomienia klienta SMS. |
4 | Nie ma potrzeby definiowania stałych domyślnych, a Android Studio dba o stałe domyślne. |
5 | Zmodyfikuj plik AndroidManifest.xml, jak pokazano poniżej |
6 | Uruchom aplikację, aby uruchomić emulator Androida i zweryfikować wynik zmian wprowadzonych w aplikacji. |
Poniżej znajduje się zawartość zmodyfikowanego pliku głównego działania 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;
}
}
Poniżej będzie treść res/layout/activity_main.xml plik -
Tutaj abc wskazuje na logo tutorialspoint
<?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>
Poniżej będzie treść res/values/strings.xml zdefiniować dwie nowe stałe -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">tutorialspoint</string>
</resources>
Poniżej znajduje się domyślna zawartość 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>
Spróbujmy uruchomić Twój tutorialspointpodanie. Zakładam, że podłączyłeś swoje rzeczywiste urządzenie mobilne z systemem Android do komputera. Aby uruchomić aplikację ze studia Android, otwórz jeden z plików aktywności projektu i kliknij
Wybierz swoje urządzenie mobilne jako opcję, a następnie sprawdź swoje urządzenie mobilne, które wyświetli następujący ekran -
Teraz użyj Compose SMS przycisk do uruchamiania wbudowanych klientów SMS dla Androida, który jest pokazany poniżej -
Możesz zmodyfikować dowolne z podanych pól domyślnych i na koniec użyć przycisku Wyślij SMS, aby wysłać wiadomość SMS do wspomnianego odbiorcy.