2016-10-06 7 views
0

Я использую следующий код для установки мелодии для отдельных контактовНе назначая мелодию в некоторых устройствах

String contact_number = "MOBILE_NUMBER"; 
     Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, contact_number); 

     // The columns used for `Contacts.getLookupUri` 
     String[] projection = new String[]{ 
       ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY 
     }; 

     // Build your Cursor 
     Cursor data = getContentResolver().query(lookupUri, projection, null, null, null); 

     if (data != null && data.moveToFirst()) { 
      data.moveToFirst(); 
      try { 
       // Get the contact lookup Uri 
       long contactId = data.getLong(0); 
       String lookupKey = data.getString(1); 
       Uri contactUri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey); 
       if (contactUri == null) { 
        // Invalid arguments 
        return; 
       } 

       String ringtoneUri = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Test"; 
       File filePath = new File(ringtoneUri, "Bhar.MP3"); 

       Log.e("filePath", filePath.toString()); 

       String value = Uri.fromFile(filePath).toString(); 

       // Apply the custom ringtone 
       ContentValues values = new ContentValues(); 
       values.put(ContactsContract.Data.RAW_CONTACT_ID, contactId); 
       values.put(ContactsContract.Contacts.CUSTOM_RINGTONE, value); 
       getContentResolver().update(contactUri, values, null, null); 


      } finally { 
       // Don't forget to close your Cursor 
       data.close(); 
      } 
     } 

этот код работает в большинстве устройств, но это не работает в Samsung J5 (Android версия 6.0.1), и я также проверил в тех же версиях, что и устройства (например, Moto G3), в этих устройствах он работает нормально.

Примечание:

  1. Я дал все разрешения, связанные Зефир

  2. Когда я задаю рингтон на мобильный J5. Он назначает имя мелодии конкретному контакту, но не воспроизводит назначенный рингтон. Для понимания проверьте прикрепленное изображение

enter image description here

ответ

0

Этот this question я попытался проверить носитель URI вместо файла URI. Кажется, что некоторые (или даже самые) устройства не любят устанавливать фактический файл, не создавая в первый раз запись в файле для записи .

Вот мой «рингтон скачать» код, который работает на всех, за которым следует код, который не работает на некоторых:

URLConnection сп = новый URL (mediaUrl) .openConnection();

А вот старый код, который не работает:

URLConnection cn = new URL(mediaUrl).openConnection(); 

     cn.connect(); 
     InputStream stream = cn.getInputStream(); 

     final File dir = new File(Environment.getExternalStorageDirectory().toString() + donloadedFilesDir); 
     dir.mkdirs(); //create folders where write files 
     final File file = new File(dir, getFileName(mediaUrl)); 

     FileOutputStream out = new FileOutputStream(file); 
     byte buffer[] = new byte[1024]; 
     int dataSize; 
     while ((dataSize = stream.read(buffer)) != -1) { 
      out.write(buffer, 0, dataSize); 
     } 

     stream.close(); 
     out.flush(); 
     out.close(); 

     return Uri.fromFile(file).toString(); 
+0

Благодарим Вас за решение – Bahu

+0

@Bahu Sure вещь, вы должны пометить его как решение, если оно действительно решить конкретную проблему –

+0

Уверен, что я соглашусь, когда я работаю над этим – Bahu