2010-03-13 37 views
6

如何將鈴聲應用於選定的聯繫人?如何爲Android上的單個聯繫人設置鈴聲?

我找到了一種方法來設置適用於所有聯繫人的默認鈴聲,但這不是我的目標。

我想要一個應用程序有一個按鈕(「應用鈴聲聯繫人」),點擊後,開始一個activityForResult顯示手機上的所有聯繫人列表。選擇聯繫人後,聯繫活動將關閉並返回到聯繫人的URI。然後,該應用程序需要將選定的鈴聲應用於該特定聯繫人。

通過活動顯示和選擇聯繫人的代碼已經實現,似乎在應用程序上工作。

+1

droid.provider.ContactsContract.ContactOptionsColumns對於鈴聲URI具有CUSTOM_RINGTONE,所以應該可以使用CUSTOM_RINGTONE更新所選鈴聲 – skyman 2010-03-13 11:07:29

回答

10

您可以使用ContactsContract.Contacts,其中有一列CUSTOM_RINGTONE(這是一個讀/寫列!)用於此目的。

Uri contactUri; 
ContentValues values = new ContentValues(); 
values.put(ContactsContract.Contacts.CUSTOM_RINGTONE, 
    newRingtoneUri.toString()); 
context.getContentResolver().update(contactUri, values, where, args); 

此外,你可能會發現this discussion有用(代碼取自那裏)。

+0

謝謝,這是一個非常有幫助的討論。 Lot的開發人員缺乏來自Google的文檔和示例。我會試一試你的粘貼代碼。希望工作在1.5 - > 2.1 ...目前應用程序使用的當前代碼僅適用於1.5和1.6,而不適用於2.0或2.1 ...例如,適用於Magic,Hero和G1,但不適用於DROID或Nexus – 2010-03-13 12:35:12

+0

Vidar Vestnes能否請您發佈最終的代碼來設置聯繫人的鈴聲。我不知道如何獲取音樂文件的URL並將其提供給「ContentValues」。 – Sourav301 2014-02-25 18:58:06

+0

我的鈴聲擴展應該總是ogg,或者我可以使用mp3擴展? – Glolita 2014-04-03 13:20:05

0

我知道這是這麼晚了,但我在這裏張貼,因爲上面一個不爲我工作

ContentValues values = new ContentValues(); 

    ContentResolver resolver = getContentResolver(); 

    File file = new File(Environment.getExternalStorageDirectory() + "/Test/ArjunMovieTelugu.mp3"); 
    if(file.exists()) { 

     Uri oldUri = MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath()); 
     resolver.delete(oldUri, MediaStore.MediaColumns.DATA + "=\"" + file.getAbsolutePath() + "\"", null); 


     String contact_number = "CONTACT_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 
     }; 

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

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

      values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath()); 
      values.put(MediaStore.MediaColumns.TITLE, "Beautiful"); 
      values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); 
      values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 

      Uri uri = MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath()); 
      Uri newUri = resolver.insert(uri, values); 

      if(newUri != null){ 
       String uriString = newUri.toString(); 
       values.put(ContactsContract.Contacts.CUSTOM_RINGTONE, uriString); 
       Log.e("Uri String for " + ContactsContract.Contacts.CONTENT_URI, uriString); 
       long updated = resolver.update(contactUri, values,null, null); 

       Toast.makeText(RingtoneChange.this, "Updated : " + updated, Toast.LENGTH_LONG).show(); 
      } 

      data.close(); 
     } 


    } else { 
     Toast.makeText(RingtoneChange.this, "File does not exist", Toast.LENGTH_LONG).show(); 
    } 

注:我們必須爲蜀葵添加運行權限

int REQUEST_ID_MULTIPLE_PERMISSIONS = 1; 

private boolean checkAndRequestPermissions() { 
int readExternal = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE); 
int writeExternal = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE); 
int readContacts = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_CONTACTS); 
int writeContacts = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_CONTACTS); 

List<String> listPermissionsNeeded = new ArrayList<>(); 

if (readExternal != PackageManager.PERMISSION_GRANTED) { 
    listPermissionsNeeded.add(android.Manifest.permission.READ_EXTERNAL_STORAGE); 
} 
if (writeExternal != PackageManager.PERMISSION_GRANTED) { 
    listPermissionsNeeded.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE); 
} 
if (readContacts != PackageManager.PERMISSION_GRANTED) { 
    listPermissionsNeeded.add(android.Manifest.permission.READ_CONTACTS); 

} 
if (writeContacts != PackageManager.PERMISSION_GRANTED) { 
    listPermissionsNeeded.add(android.Manifest.permission.WRITE_CONTACTS); 

} 

if (!listPermissionsNeeded.isEmpty()){ 
    ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray 
      (new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS); 
    return false; 
} 
return true; 
} 

並且還在清單文件中包括所有這些權限,如

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
相關問題