Android为用户自定义号码设置自定义铃声

Posted

技术标签:

【中文标题】Android为用户自定义号码设置自定义铃声【英文标题】:Android set Custom ringtone for user defined number 【发布时间】:2021-02-25 12:13:49 【问题描述】:

我正在编写用于在 android 中设置自定义铃声的代码。从***中的其他答案中获得帮助。这是代码。

private void setContactRingtone(String number) 
    final Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
// The columns used for `Contacts.getLookupUri`
    final String[] projection = new String[]
            ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY
    ;
// Build your Cursor
    final Cursor data = getContentResolver().query(lookupUri, projection, null, null, null);
    data.moveToFirst();
    try 
        // Get the contact lookup Uri
        final long contactId = data.getLong(0);
        final String lookupKey = data.getString(1);
        final Uri contactUri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey);
        if (contactUri == null) 
            // Invalid arguments
            return;
        

        File file = new File(this.getFilesDir() + File.separator + "ringtone.mp3");
        final String value = Uri.fromFile(file).toString();

        final ContentValues values = new ContentValues(1);
        values.put(ContactsContract.Contacts.CUSTOM_RINGTONE, value);
        getContentResolver().update(contactUri, values, null, null);
        Toast.makeText(getApplicationContext(), "Done!!!!!!!!!!!", Toast.LENGTH_SHORT).show();
     catch (Exception ex) 
        ex.printStackTrace();
     finally 
        // Don't forget to close your Cursor
        data.close();
    
 

代码未将用户定义的铃声分配给联系人。没有生成异常。

【问题讨论】:

【参考方案1】:

所以问题出在 android 10 资产文件夹中,可通过 inputstream 访问。Referred this answer

这里我们创建一个临时文件并写入外部存储。然后读取那个文件。

【讨论】:

以上是关于Android为用户自定义号码设置自定义铃声的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义Android推送提示音,让你的应用与众不同

微信来消息的提示音,怎么更改成自定义的?就是自己喜欢的铃声!

如何在iOS中实现,将JSValue 转为自定义类型

如何自定义Android推送提示音,让你的应用与众不同

iOS 10 iPhone 自定义声音作为铃声

iOS - 自定义 iPhone 铃声