在 Android 应用程序中,获取系统短信主要涉及到两个方面的内容:权限和代码实现。首先,需要确保应用程序在 AndroidManifest.xml 文件中声明了相应的权限:
<uses-permission android:name="android.permission.READ_SMS" />
接下来,可以使用以下代码来获取系统短信:
import android.Manifest;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Telephony;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private static final int PERMISSION_REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS}, PERMISSION_REQUEST_CODE);
} else {
readSms();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
readSms();
}
}
}
private void readSms() {
List<String> smsList = new ArrayList<>();
// 获取短信数据
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(Uri.parse("content://sms/inbox"), null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
int bodyIndex = cursor.getColumnIndex("body");
do {
String body = cursor.getString(bodyIndex);
smsList.add(body);
} while (cursor.moveToNext());
cursor.close();
}
// 处理短信数据
for (String sms : smsList) {
// 将短信内容进行处理
// ...
}
}
}
以上代码会在应用程序启动时检查是否已经获得了读取短信的权限,如果没有权限,会发起权限请求。如果已经获得了权限,会调用 readSms()
方法来获取系统短信。
在 readSms()
方法中,首先通过 ContentResolver
对象获取到系统短信的 Cursor
对象,然后遍历 Cursor
对象读取短信内容,并将短信内容存储到一个列表中。接下来,可以根据实际需求对短信内容进行处理。
在Android中获取系统短信可以使用以下步骤:
- 添加权限:
在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.READ_SMS" />
- 创建一个BroadcastReceiver类:
创建一个继承自BroadcastReceiver的类,并重写onReceive方法。在onReceive方法中获取短信内容。
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus != null) {
for (Object pdu : pdus) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
String messageBody = smsMessage.getMessageBody();
// 处理短信内容
}
}
}
}
}
}
- 注册BroadcastReceiver:
在AndroidManifest.xml文件中注册BroadcastReceiver,并指定接收短信的action。
<receiver android:name=".SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
- 动态申请权限:
在Activity中动态申请读取短信的权限。
private static final int REQUEST_READ_SMS_PERMISSION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_SMS},
REQUEST_READ_SMS_PERMISSION);
} else {
// 已经有读取短信的权限,执行相关操作
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == REQUEST_READ_SMS_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 获取到了读取短信的权限,执行相关操作
} else {
// 用户拒绝了读取短信的权限,无法执行相关操作
}
}
}
通过以上步骤,你就可以在Android中获取系统短信内容了。请注意,在Android 10及以上版本中,读取短信内容需要在运行时动态申请权限。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/144015.html