正如很多人在这里问的那样,我通过以下链接找出了为特定联系人设置自定义响铃的过程:
Setting contact custom ringtone, how?
我使用了@ viperbone的解决方案,它帮助我向用户显示联系人选择窗口并获取所选人员的ID。
现在的问题是:在所有代码运行后,所选联系人的铃声仍然相同。
我在这里搜索了很多主题并用谷歌搜索了它们,他们都使用相同的方法来处理这个过程但是我的工作不起作用。
这是代码:
public class SetCustomContacts extends Activity {
// put that constant in your class
static public final int CONTACT_CHOOSER_ACTIVITY_CODE = 73729;
private String musicId;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
musicId = getIntent().getExtras().getString("music_id");
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
startActivityForResult(intent, CONTACT_CHOOSER_ACTIVITY_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case (CONTACT_CHOOSER_ACTIVITY_CODE) :
if (resultCode == Activity.RESULT_OK) {
try{
Scanner in = new Scanner(musicId).useDelimiter("[^0-9]+");
int integer = in.nextInt();
String filePath2 = getFilesDir() + File.separator + String.valueOf(integer) + ".mp3";
File ringFile = new File(filePath2);
File fileDest = null;
try{
fileDest = new File(Environment.getExternalStorageDirectory().getPath(), "ringSpecificContact" + ".mp3");
copy(ringFile, fileDest);
}catch (Exception ex){
Log.d("File Copy: ", ex.toString());
}
Uri contactData = data.getData();
String contactId = contactData.getLastPathSegment();
String[] PROJECTION = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
};
Cursor localCursor = getContentResolver().query(contactData, PROJECTION, null, null, null);
localCursor.moveToFirst();
String contactID = localCursor.getString(localCursor.getColumnIndexOrThrow("_id"));
String contactDisplayName = localCursor.getString(localCursor.getColumnIndexOrThrow("display_name"));
Uri localUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, contactID);
localCursor.close();
ContentValues localContentValues = new ContentValues();
localContentValues.put(ContactsContract.Data.RAW_CONTACT_ID, contactId);
localContentValues.put(ContactsContract.Data.CUSTOM_RINGTONE, Environment.getExternalStorageDirectory() + "/ringSpecificContact.mp3");
getContentResolver().update(localUri, localContentValues, null, null);
Toast.makeText(this, contactDisplayName, Toast.LENGTH_LONG).show();
} catch(Exception ex){
Log.d("on onActivityResult: ", ex.toString());
}
}
break;
}
onBackPressed();
}
public void copy(File src, File dst) throws IOException {
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
}