【发布时间】:2025-01-10 11:35:01
【问题描述】:
我正在处理一个奇怪的权限问题。
我正在尝试读取联系人、短信和通话记录,为此,我在我的清单中使用了这些权限:
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
当我第一次开始阅读短信时,它起作用了。然后我尝试了联系人,我收到一条错误消息,告诉我我需要 READ_CONTACTS 权限(我已经使用过)。我清理了项目,然后它工作了。但现在没有任何效果,无论是短信、联系人还是通话记录。我清理了项目,重新构建它,仍然没有。
我的 gradle 构建:
android {
compileSdkVersion 23
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.xyz"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
我不认为 minSdkVerion 或 compileSdkVersion 有问题,就像我一开始说的短信阅读工作,现在即使我删除通话记录权限也没有。
一些代码行:
public void backUpContacts() {
String[] dataContacts = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone._ID};
Cursor cursor = this.mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, dataContacts, null, null, null);
JSONObject jsonContacts;
JSONArray jsonArray = new JSONArray();
while (cursor != null && cursor.moveToNext()) {
jsonContacts = new JSONObject();
for (int i = 0; i < cursor.getColumnCount(); i++) {
jsonContacts.put(cursor.getColumnName(i), cursor.getString(i));
}
contacts = cursor.getColumnCount();
jsonArray.add(jsonContacts);
}
Log.d("jsonArray", jsonArray.toString());
if (cursor != null) cursor.close();
createFile(jsonArray, "contacts");
}
public void backupSms() {
JSONArray listSmsInbox;
JSONArray listSmsSent;
listSmsInbox = getPhoneSms("content://sms/inbox", "received");
listSmsSent = getPhoneSms("content://sms/sent", "sent");
Log.i("listSmsInbox", listSmsInbox.toString());
Log.i("listSmsSent", listSmsSent.toString());
}
private JSONArray getPhoneSms(String parsing, String param) {
Cursor c = this.mContext.getContentResolver().query(Uri.parse(parsing), null, null, null, null);
JSONObject jsonSms = new JSONObject();
JSONArray jsonArray = new JSONArray();
while (c != null && c.moveToNext()) {
jsonSms = new JSONObject();
for (int i = 0; i < c.getColumnCount(); i++) {
jsonSms.put(c.getColumnName(i), c.getString(i));
}
jsonArray.add(jsonSms);
if (param.equals("received")) {
receivedSms = c.getColumnCount();
} else {
sentSms = c.getColumnCount();
}
}
jsonArray.add(jsonSms);
if (c != null) c.close();
createFile(jsonArray, param);
return jsonArray;
}
我正在使用 AsyncTask 调用这些方法:
@Override
protected Void doInBackground(Void... params) {
if (param.equals("contacts")) {
backUpContent.backUpContacts();
} else if (param.equals("sms")) {
backUpContent.backupSms();
} else if (param.equals("callLogs")) {
backUpContent.backUpCallLogs();
}
publishProgress(0);
return null;
}
感谢您的帮助!
【问题讨论】:
-
查看*.com/questions/32635704/cant-get-the-permission,然后将
targetSdkVersion放到22或添加对代码运行时权限的支持。
标签: android permissions android-contentprovider