Android 读取手机短信的实现流程
流程图
flowchart TD
A(开始)-->B(获取短信权限)
B-->C(查询短信)
C-->D(遍历短信列表)
D-->E(获取短信内容)
E-->F(显示短信内容)
F-->G(结束)
步骤详解
- 获取短信权限:首先,我们需要获取读取短信的权限。在AndroidManifest.xml文件中添加以下代码:
<uses-permission android:name="android.permission.READ_SMS" />
- 查询短信:使用ContentResolver类来查询短信。在你的Activity或Fragment中,添加以下代码:
String[] projection = new String[]{"_id", "address", "body"};
Uri uri = Uri.parse("content://sms/inbox");
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
这段代码创建了一个投影(projection),指定了需要查询的短信字段。然后,我们使用ContentResolver的query方法来查询短信,参数uri指定了查询的Uri,这里是短信收件箱的Uri。
- 遍历短信列表:通过Cursor对象遍历短信列表,获取每一条短信的信息。添加以下代码:
if (cursor != null && cursor.moveToFirst()) {
do {
// 获取短信内容
String messageId = cursor.getString(cursor.getColumnIndex("_id"));
String address = cursor.getString(cursor.getColumnIndex("address"));
String body = cursor.getString(cursor.getColumnIndex("body"));
// 显示短信内容
Log.d("SMS", "短信ID:" + messageId);
Log.d("SMS", "短信发送方:" + address);
Log.d("SMS", "短信内容:" + body);
} while (cursor.moveToNext());
}
这段代码通过游标cursor来遍历短信列表,每一次循环获取一条短信的信息。我们使用getColumnIndex方法来获取对应字段在查询结果中的索引,然后使用getString方法来获取字段的值。
- 显示短信内容:在这个例子中,我们使用Log.d方法来打印短信内容到Android Studio的Logcat窗口。你也可以根据自己的需要,将短信内容展示到UI界面上。
Log.d("SMS", "短信ID:" + messageId);
Log.d("SMS", "短信发送方:" + address);
Log.d("SMS", "短信内容:" + body);
完整代码
下面是上述步骤的完整代码示例:
public class MainActivity extends AppCompatActivity {
@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}, 1);
} else {
// 已有权限,读取短信
readSMS();
}
}
private void readSMS() {
String[] projection = new String[]{"_id", "address", "body"};
Uri uri = Uri.parse("content://sms/inbox");
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
// 获取短信内容
String messageId = cursor.getString(cursor.getColumnIndex("_id"));
String address = cursor.getString(cursor.getColumnIndex("address"));
String body = cursor.getString(cursor.getColumnIndex("body"));
// 显示短信内容
Log.d("SMS", "短信ID:" + messageId);
Log.d("SMS", "短信发送方:" + address);
Log.d("SMS", "短信内容:" + body);
} while (cursor.moveToNext());
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == 1 && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户授予短信权限,读取短信
readSMS();
} else {
// 用户拒绝短信权限,处理相应逻辑
}
}
}
总结
通过上述流程图和代码,我们可以实现Android读取手机短信的功能