在Android 7.0以及更高的版本中,需要申请权限来读取短信。这包括READ_SMS权限和RECEIVE_SMS权限。这些权限必须在运行时请求,而且用户必须明确地授予这些权限。
以下是获取这些权限的代码示例:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.READ_SMS) == PackageManager.PERMISSION_DENIED) {
Log.d("permission", "permission denied to READ_SMS - requesting it");
String[] permissions = {Manifest.permission.READ_SMS};
requestPermissions(permissions, PERMISSION_REQUEST_READ_SMS);
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.RECEIVE_SMS) == PackageManager.PERMISSION_DENIED) {
Log.d("permission", "permission denied to RECEIVE_SMS - requesting it");
String[] permissions = {Manifest.permission.RECEIVE_SMS};
requestPermissions(permissions, PERMISSION_REQUEST_RECEIVE_SMS);
}
}
一旦用户授予了这些权限,你就可以使用ContentResolver来查询和读取短信。
例如:
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(Telephony.Sms.Inbox.CONTENT_URI, null, null, null, null);
int indexBody = cursor.getColumnIndex(Telephony.Sms.Inbox.BODY);
int indexAddr = cursor.getColumnIndex(Telephony.Sms.Inbox.ADDRESS);
if (indexBody < 0 || !cursor.moveToFirst()) return;
do {
String strBody = cursor.getString(indexBody);
String strAddress = cursor.getString(indexAddr);
} while (cursor.moveToNext());
请注意,从用户那里获取这些敏感权限需要提供合理的解释,并且你的应用必须遵守所有的隐私政策和用户条款。
在Android 7.0或更高版本中,应用需要用户授予读取短信的权限才能读取短信。以下是Android 7.0读取短信的大致步骤:
- 在AndroidManifest.xml文件中请求必要的权限,如下:
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
- 在需要读取短信的地方请求权限。可使用Android的PermissionCompat类请求权限。例如:
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS}, MY_PERMISSIONS_REQUEST_READ_SMS);
其中,MY_PERMISSIONS_REQUEST_READ_SMS是你定义的请求码,用于在请求权限的回调方法onRequestPermissionsResult()中识别请求来源。
- 在onRequestPermissionsResult()方法中处理权限请求的结果。如果权限被授予,你可以继续进行读取短信的操作。
例如,可以通过ContentResolver查询设备的短信数据库:

Uri uri = Uri.parse("content://sms/inbox");
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
注意:自Android 6.0(API级别23)起,用户可以在任何时候撤销应用的权限。因此,应用在运行时需要检查是否还有必要的权限,如果没有,需要重新请求。
以上只是基础的步骤和信息,具体的操作可能需要根据你的应用需求和实际情况进行调整。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/167646.html