私は奇妙な権限の問題を扱っています。権限の拒否 - 権限が機能しません。
私は連絡先、SMS、通話ログを読み取るしようとしていて、そのために、私は私のマニフェストでこれらの権限を使用しています:
<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" />
私は最初のSMSを読み始めたとき、それが働きました。それから私は連絡先を試してみましたが、READ_CONTACTSパーミッションが必要であることを伝えるエラーメッセージが表示されました。私はこのプロジェクトをきれいにしてから働きました。しかし、SMS、連絡先、通話履歴など、何も機能しません。私は、プロジェクトをきれいにし、それを再構築し、まだ何もしていない。
私のGradleのビルド:
android {
compileSdkVersion 23
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.xyz"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
は、私が始まるSMSの読み取りで言ったように私は今、それは私がコールログのアクセス許可を削除した場合でもありません、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;
}
ありがとう!
はhttps://stackoverflow.com/questions/32635704/cantを参照してください。 -get-the-permissionを実行し、 'targetSdkVersion'を' 22'に落とすか、コードにランタイム権限のサポートを追加してください。 – CommonsWare