2016-03-28 25 views
-1

Tuhaf bir izin sorunuyla uğraşıyorum.İzin reddi - izinler çalışmıyor

Adresleri, SMS ve arama kayıtlarına okumaya çalışıyorum ve bunun için, benim Manifestosunun bu izinleri kullanıyorum:

<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" /> 

Ben ilk sms okumaya başladığımda, işe yaradı. Sonra kişileri denedim ve READ_CONTACTS iznine ihtiyacım olduğunu bildiren bir hata mesajı aldım (zaten kullandım). Projeyi temizledim ve sonra işe yaradı. Ama şimdi hiçbir şey işe yaramıyor, SMS, iletişim veya arama kayıtları olsun. Projeyi temizledim, yeniden inşa ediyorum, hala hiçbir şey yok.

Benim gradle inşa:

android { 
    compileSdkVersion 23 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     applicationId "com.xyz" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 

ben minSdkVerion sanmıyorum ya ben çağrı kaydı iznini kaldırırsanız şimdi bile değil, amele başlayan SMS okumada dediğim gibi compileSdkVersion bir sorundur.

Bazı kod satırları:

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; 
    } 

Ben AsyncTask ile bu yöntemleri arıyorum: Yardımlarınız için

@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; 
    } 

teşekkürler!

+2

Bkz https://stackoverflow.com/questions/32635704/cant İşte

benim onRequestPermissionsResult() 'dir -get-the-perm, sonra 'targetSdkVersion'' '' '' ya bırakın veya kodunuza çalışma zamanı izinleri için destek ekleyin. – CommonsWare

cevap

-1

İzinlerin sırasını etrafta dolaşmaya çalışın. Read_Contacts iznini Read_SMS

+0

'' öğelerinin sırasının kullanımları üzerinde herhangi bir etkisi yoktur. Kökenin '' öğesinin ani çocukları oldukları sürece, göründükleri sıra önemsizdir. – CommonsWare

+0

Bunun farkındayım, ama bir yıl içinde benzer bir hata yaşadım ya da bu yüzden bu reklamı düzeltmek için kullandığım yöntem. Lütfen cevabı bir dahaki sefere otomatik olarak düşürmeden önce sorgulayın. – Ethan

+0

Başka bir şey sorununuzu giderdi. Bu yapmadı. Sorunuzu düzenlerseniz ve ' 'öğelerinin sırasının önemli olduğunu gösteren tekrarlanabilir bir test durumu sağlarsanız, reddedilmemi memnuniyetle geri çekerim. – CommonsWare

0

üzerinden yerleştirmeyi deneyeceğim. Hızlı yanıtlarınız için özellikle @CommonsWare'a teşekkür ederim. Bu konuyu bulamadım, başkalarını buldum (maalesef daha yaşlı). CheckSelfPermission() ve requestPermissions() kullandı ve onRequestPermissionsResult() öğesini geçersiz kıldım. Şimdi iyi çalışıyor. Kodumu burada yazıyorum, böylece bu konuyla ilgilenen herkes bunun nasıl çalıştığını anlayabilir.

@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     switch (requestCode) { 
      case REQUEST_CODE_ASK_PERMISSIONS: // final int variable = 123 
       if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        // Permission Granted 
        myMethodHere(); 
        return; 
       } else { 
        // Permission Denied 
        Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT) 
          .show(); 
       } 
       break; 
      default: 
       super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     } 
    } 

Ve her içerik sağlayıcı önce aramıştım yöntemi::

int hasReadContactsPermission = checkSelfPermission(mContext, permission); 
     if (hasReadContactsPermission != PackageManager.PERMISSION_GRANTED) { 
      requestPermissions(this.activity, new String[]{permission}, 
        REQUEST_CODE_ASK_PERMISSIONS); 
      return; 
     }