Android - Gửi SMS
Trong Android, bạn có thể sử dụng SmsManager API hoặc các thiết bị Ứng dụng SMS tích hợp để gửi SMS. Trong hướng dẫn này, chúng tôi chỉ cho bạn hai ví dụ cơ bản để gửi tin nhắn 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);
Tất nhiên, cả hai đều cần SEND_SMS permission.
<uses-permission android:name="android.permission.SEND_SMS" />
Ngoài phương thức trên, có một số chức năng quan trọng khác có sẵn trong lớp SmsManager. Các phương pháp này được liệt kê bên dưới -
Sr.No. | Phương pháp & Mô tả |
---|---|
1 |
ArrayList<String> divideMessage(String text) Phương pháp này chia văn bản tin nhắn thành nhiều đoạn, không lớn hơn kích thước tin nhắn SMS tối đa. |
2 |
static SmsManager getDefault() Phương thức này được sử dụng để lấy phiên bản mặc định của SmsManager |
3 |
void sendDataMessage(String destinationAddress, String scAddress, short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) Phương thức này được sử dụng để gửi SMS dựa trên dữ liệu đến một cổng ứng dụng cụ thể. |
4 |
void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) Gửi SMS dựa trên văn bản gồm nhiều phần. |
5 |
void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) Gửi tin nhắn SMS dựa trên văn bản. |
Thí dụ
Ví dụ sau đây cho bạn thấy cách sử dụng đối tượng SmsManager để gửi tin nhắn SMS đến số điện thoại đã cho.
Để thử nghiệm với ví dụ này, bạn sẽ cần thiết bị Di động thực tế được trang bị Hệ điều hành Android mới nhất, nếu không, bạn sẽ phải vật lộn với trình giả lập có thể không hoạt động.
Bươc | Sự miêu tả |
---|---|
1 | Bạn sẽ sử dụng Android Studio IDE để tạo ứng dụng Android và đặt tên nó là điểm hướng dẫn trong gói com.example.tutorialspoint . |
2 | Sửa đổi tệp src / MainActivity.java và thêm mã bắt buộc để thực hiện việc gửi sms. |
3 | Sửa đổi tệp XML bố cục res / layout / activity_main.xml thêm bất kỳ thành phần GUI nào nếu cần. Tôi đang thêm một GUI đơn giản để gửi số điện thoại di động và tin nhắn SMS cũng như một nút đơn giản để gửi SMS. |
4 | Không cần phải xác định hằng số chuỗi mặc định tại res / values / string.xml. Android studio chăm sóc các hằng số mặc định. |
5 | Sửa đổi AndroidManifest.xml như hình dưới đây |
6 | Chạy ứng dụng để khởi chạy trình giả lập Android và xác minh kết quả của các thay đổi được thực hiện trong ứng dụng. |
Sau đây là nội dung của tệp hoạt động chính được sửa đổi 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;
}
}
}
}
}
Sau đây sẽ là nội dung của res/layout/activity_main.xml tập tin -
Ở đây abc chỉ ra về logo hướng dẫn
<?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>
Sau đây sẽ là nội dung của res/values/strings.xml để xác định hai hằng số mới -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">tutorialspoint</string>
</resources>
Sau đây là nội dung mặc định của 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>
Hãy cố gắng chạy tutorialspointứng dụng. Tôi giả sử bạn đã kết nối thiết bị di động Android thực tế với máy tính của mình. Để chạy ứng dụng từ Android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào
Bây giờ bạn có thể nhập một số điện thoại di động mong muốn và một tin nhắn văn bản sẽ được gửi đến số đó. Cuối cùng bấm vàoSend SMSđể gửi tin nhắn SMS của bạn. Đảm bảo kết nối GSM / CDMA của bạn đang hoạt động tốt để gửi SMS của bạn đến người nhận.
Bạn có thể nhận một số SMS được phân tách bằng dấu phẩy và sau đó bên trong chương trình của bạn, bạn sẽ phải phân tích chúng thành một chuỗi mảng và cuối cùng bạn có thể sử dụng một vòng lặp để gửi tin nhắn đến tất cả các số đã cho. Đó là cách bạn có thể viết ứng dụng SMS của riêng mình. Phần tiếp theo sẽ hướng dẫn bạn cách sử dụng ứng dụng SMS hiện có để gửi SMS.
Sử dụng Intent tích hợp để gửi SMS
Bạn có thể sử dụng Android Intent để gửi SMS bằng cách gọi chức năng SMS tích hợp của Android. Phần sau giải thích các phần khác nhau của đối tượng Intent của chúng tôi cần có để gửi SMS.
Đối tượng ý định - Hành động gửi SMS
Bạn sẽ sử dụng ACTION_VIEWđể khởi chạy ứng dụng SMS được cài đặt trên thiết bị Android của bạn. Sau đây là cú pháp đơn giản để tạo một ý định với hành động ACTION_VIEW.
Intent smsIntent = new Intent(Intent.ACTION_VIEW);
Đối tượng ý định - Dữ liệu / Loại để gửi SMS
Để gửi SMS, bạn cần chỉ định smsto: vì URI sử dụng phương thức setData () và kiểu dữ liệu sẽ là vnd.android-dir/mms-sms sử dụng phương thức setType () như sau:
smsIntent.setData(Uri.parse("smsto:"));
smsIntent.setType("vnd.android-dir/mms-sms");
Đối tượng Ý định - Thêm để gửi SMS
Android có hỗ trợ tích hợp để thêm số điện thoại và tin nhắn văn bản để gửi SMS như sau:
smsIntent.putExtra("address" , new String("0123456789;3393993300"));
smsIntent.putExtra("sms_body" , "Test SMS to Angilla");
Ở đây địa chỉ và sms_body phân biệt chữ hoa chữ thường và chỉ nên được chỉ định bằng các ký tự nhỏ. Bạn có thể chỉ định nhiều số trong chuỗi đơn nhưng được phân tách bằng dấu chấm phẩy (;).
Thí dụ
Ví dụ sau đây cho bạn thấy thực tế cách sử dụng đối tượng Intent để khởi chạy ứng dụng khách SMS để gửi SMS đến những người nhận nhất định.
Để thử nghiệm với ví dụ này, bạn sẽ cần thiết bị Di động thực tế được trang bị Hệ điều hành Android mới nhất, nếu không, bạn sẽ phải vật lộn với trình giả lập có thể không hoạt động.
Bươc | Sự miêu tả |
---|---|
1 | Bạn sẽ sử dụng Android studio IDE để tạo ứng dụng Android và đặt tên nó là điểm hướng dẫn theo gói com.example.tutorialspoint . |
2 | Sửa đổi tệp src / MainActivity.java và thêm mã bắt buộc để xử lý việc gửi SMS. |
3 | Sửa đổi tệp XML bố cục res / layout / activity_main.xml thêm bất kỳ thành phần GUI nào nếu cần. Tôi đang thêm một nút đơn giản để khởi chạy SMS Client. |
4 | Không cần phải xác định các hằng số mặc định.Android studio sẽ chăm sóc các hằng số mặc định. |
5 | Sửa đổi AndroidManifest.xml như hình dưới đây |
6 | Chạy ứng dụng để khởi chạy trình giả lập Android và xác minh kết quả của các thay đổi được thực hiện trong ứng dụng. |
Sau đây là nội dung của tệp hoạt động chính được sửa đổi 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;
}
}
Sau đây sẽ là nội dung của res/layout/activity_main.xml tập tin -
Ở đây abc chỉ ra về logo hướng dẫn
<?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>
Sau đây sẽ là nội dung của res/values/strings.xml để xác định hai hằng số mới -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">tutorialspoint</string>
</resources>
Sau đây là nội dung mặc định của 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>
Hãy cố gắng chạy tutorialspointứng dụng. Tôi giả sử bạn đã kết nối thiết bị di động Android thực tế với máy tính của mình. Để chạy ứng dụng từ Android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào
Chọn thiết bị di động của bạn làm tùy chọn và sau đó kiểm tra thiết bị di động của bạn sẽ hiển thị màn hình sau -
Bây giờ sử dụng Compose SMS để khởi chạy ứng dụng SMS cài sẵn của Android được hiển thị bên dưới -
Bạn có thể sửa đổi một trong các trường mặc định nhất định và cuối cùng sử dụng nút gửi SMS để gửi SMS của bạn đến người nhận được đề cập.