安卓开发可以通过访问系统的Content Provider来读取短信。以下是一个简单的例子:
- 首先,在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
- 创建一个SMS的辅助类,用于读取短信内容:
public class SMSReader {
public static List<String> readSMS(Context context) {
List<String> smsList = new ArrayList<>();
Uri uri = Uri.parse("content://sms/inbox");
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
String sms = cursor.getString(cursor.getColumnIndexOrThrow("body"));
smsList.add(sms);
} while (cursor.moveToNext());
cursor.close();
}
return smsList;
}
}
- 在需要读取短信的地方调用以上方法:
List<String> smsList = SMSReader.readSMS(context);
for (String sms : smsList) {
// 处理读取到的短信
}
需要注意的是,从Android 6.0(API级别23)开始,需要动态请求”android.permission.READ_SMS”权限。可以使用以下代码进行权限请求:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS}, 1);
}
在用户授权之后,才能读取短信内容。
安卓开发可以使用以下代码来读取手机上的短信:
- 添加读取短信的权限到 AndroidManifest.xml 文件中:
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
- 在 Android 应用中的相应活动(Activity)中使用以下代码来读取短信:
import android.Manifest;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Telephony;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final int SMS_PERMISSION_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},
SMS_PERMISSION_CODE);
} else {
// 已经授予读取短信的权限,进行短信读取操作
readSMS();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == SMS_PERMISSION_CODE) {
// 检查授予权限的结果
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 授予了读取短信的权限
readSMS();
} else {
// 未授予读取短信的权限
Log.e(TAG, "未授予读取短信的权限");
}
}
}
private void readSMS() {
Uri smsUri = Telephony.Sms.CONTENT_URI;
Cursor cursor = getContentResolver().query(smsUri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
int bodyIndex = cursor.getColumnIndexOrThrow(Telephony.Sms.BODY);
int addressIndex = cursor.getColumnIndexOrThrow(Telephony.Sms.ADDRESS);
do {
String body = cursor.getString(bodyIndex);
String address = cursor.getString(addressIndex);
// 处理短信内容和号码
Log.d(TAG, "短信地址:" + address);
Log.d(TAG, "短信内容:" + body);
} while (cursor.moveToNext());
cursor.close();
}
}
}
注意:以上代码中需要读取短信的权限,在 Android 6.0 及以上版本的设备上需要动态请求权限。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/135758.html