【问题标题】:How can I set a ringtone for an individual contact on Android?如何在 Android 上为单个联系人设置铃声?
【发布时间】:2010-03-13 09:57:52
【问题描述】:

如何将铃声仅应用到选定的联系人?

我找到了一种方法来设置适用于所有联系人的默认铃声,但这不是我的目标。

我希望应用程序有一个按钮(“将铃声应用到联系人”),单击该按钮时会启动 activityForResult,显示手机上所有联系人的列表。选择联系人后,联系人活动将关闭并返回联系人的 URI。然后应用程序需要将选定的铃声应用到该特定联系人。

通过 Activity 显示和选择联系人的代码已经实现,并且似乎可以在应用程序上运行。

【问题讨论】:

  • android.provider.ContactsContract.ContactOptionsColumns 具有 CUSTOM_RINGTONE 用于铃声 URI,因此应该可以使用 CUSTOM_RINGTONE 更新所选联系人以获取所选铃声

标签: android contacts addressbook ringtone


【解决方案1】:

您可以使用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 很有用(代码取自那里)。

【讨论】:

  • 谢谢,这是一次非常有帮助的讨论。许多开发人员对谷歌缺乏文档和示例感到沮丧。我会试试你粘贴的代码。希望能在 1.5 -> 2.1 上工作...目前应用程序使用的当前代码仅适用于 1.5 和 1.6,不适用于 2.0 或 2.1...例如,它适用于 Magic、Hero 和 G1,但不适用于 DROID或 Nexus
  • Vidar Vestnes 能否请您发布最终代码以设置联系人的铃声。我不确定如何获取音乐文件的 URL 并将其提供给“ContentValues”。
  • 我的铃声扩展名应该始终是 ogg 还是我也可以使用 mp3 扩展名??
  • 请问您是如何获得联系 URI 的?
【解决方案2】:

我知道这太晚了,但我在这里发帖是因为上面的一个对我不起作用

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-18
    • 2019-10-29
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    相关资源
    最近更新 更多