java - 如何为特定联系人设置自定义铃声?
问题描述
我想为特定联系人设置铃声。我知道如何获取联系人并为电话设置铃声,但如何为特定联系人设置自定义铃声?
我的场景:
我单击按钮并激活
intent(RingtoneManager.ACTION_RINGTONE_PICKER)
以转到
铃声选择器活动选择我的铃声后,我
ContactDetailActivity
带着一个path
- 结束,我使用
path
为特定联系人设置自定义铃声
这是单击事件以更改为铃声选择器:
ic_ringtone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.System.canWrite(ContactDetailActivity.this)) {
Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtone);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, ringtone);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI, ringtone);
startActivityForResult(intent , 24);
}else {
Toast.makeText(ContactDetailActivity.this, "Vui lòng cấp quyền để đặt nhạc chuông"
, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
}
});
,这是我的添加铃声功能
public void addRingtone(String path){
//Phone is phone number of contact that I got
final Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, phone);
final String []projection = new String[] {ContactsContract.Contacts._ID
, ContactsContract.Contacts.LOOKUP_KEY};
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;
}
// Apply the custom ringtone
final ContentValues values = new ContentValues(1);
values.put(ContactsContract.Contacts.CUSTOM_RINGTONE, path);
getContentResolver().update(contactUri, values, null, null);
} finally {
// Don't forget to close your Cursor
data.close();
}
}
这是onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case 24:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.System.canWrite(ContactDetailActivity.this)) {
ringtone = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
addRingtone(ringtone.getPath());
// Toast.makeText(ContactDetailActivity.this, ringtone.getPath() + " " + phone + " " + id, Toast.LENGTH_SHORT).show();
}else {
Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
break;
default:
break;
}
}
}
对不起我的英语不好。我为此花了 3 天时间,实际上我想修复它。欢迎任何帮助或建议。非常感谢
解决方案
addRingtone(ringtone.getPath());
是的,最后我修复了它,问题出在将其更改为的输入参数上addRingtone(ringtone.toString());
,它会起作用
推荐阅读
- powerbi-desktop - Power BI - 具有 1 个统计列和 3 个动态列的表
- java - Jdeps 和战争档案
- javascript - _.filter 函数不适用于 _.partialRight 构造函数
- c# - 在 LINQ 表达式中过滤对象 - C#
- python-3.x - 使用函数比较 Python 列以断言错误结束
- javascript - 带有导入的简单 js 的 Webpack 配置
- javascript - 使用map函数从javascript对象中的变量中获取连接字符串
- c# - XUnit 测试 void 方法的最佳方法
- python - 查找多索引中的平均行数并在某个阈值之后删除任何行?
- python - 用两列重塑熊猫数据框中的数据