我知道如何改变手机铃声,还怎么去接触,但我怎么可以设置特定联系人的铃声?
那么,如何使用方法: ContactsContract.Contacts.CUSTOM_RINGTONE
?
我已经尝试过这样的:
Uri contactUri = ContactsContract.Contacts.CONTENT_URI;
String[] PROJECTION = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
};
String SELECTION = ContactsContract.Contacts.HAS_PHONE_NUMBER + "='1'";
Cursor contacts = managedQuery(contactUri, PROJECTION, SELECTION, null, null );
while (contacts.moveToNext())
{
String Name=contacts.getString(contacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
}
String str1 = contacts.getString(contacts.getColumnIndexOrThrow("_id"));
Uri localUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, str1);
ContentValues localContentValues = new ContentValues();
localContentValues.put(ContactsContract.Contacts.CUSTOM_RINGTONE,
f.getAbsolutePath()+"/Adveture.ogg");
MainActivity.this.getContentResolver().update(localUri, localContentValues, null, null);
但它不工作。
我发现它是如何工作的。 下面你可以看到固定的代码的代码:
Uri contactData = ContactsContract.Contacts.CONTENT_URI;
String contactId = contactData.getLastPathSegment();
Cursor localCursor = managedQuery(contactData, PROJECTION, null, null, null);
localCursor.move(120/*CONTACT ID NUMBER*/);
String str1 = localCursor.getString(localCursor.getColumnIndexOrThrow("_id"));
String str2 = localCursor.getString(localCursor.getColumnIndexOrThrow("display_name"));
Uri localUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, str1);
ContentValues localContentValues = new ContentValues();
localContentValues.put(ContactsContract.Data.RAW_CONTACT_ID, contactId);
localContentValues.put(ContactsContract.Data.CUSTOM_RINGTONE, f.getAbsolutePath()+"/Adventure.ogg");
getContentResolver().update(localUri, localContentValues, null, null);
Toast.makeText(this, "Ringtone assigned to: " + str2, 0).show();
刚刚接触ID号码更改为要更改的联系人的ID。
要打开默认联系人搜索的Android使用此代码:
// put that constant in your class
static public final int CONTACT_CHOOSER_ACTIVITY_CODE = 73729;
// start contact search activity within any method you like
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
startActivityForResult(intent, CONTACT_CHOOSER_ACTIVITY_CODE);
在onActivityResult方法,你可以使用此代码(类似于扶心的代码)来设定铃声联系人:
@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{
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();
//--> use moveToFirst instead of this: localCursor.move(Integer.valueOf(contactId)); /*CONTACT ID NUMBER*/
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, f.getAbsolutePath()+"/Adventure.ogg");
getContentResolver().update(localUri, localContentValues, null, null);
Toast.makeText(this, "Ringtone assigned to: " + contactDisplayName, Toast.LENGTH_LONG).show();
} catch(Exception ex){
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}
}
break;
}
}
注意:你还是要在F变量(代码f.getAbsolutePath()+“/ Adventure.ogg”)设置为您的文件(铃声)你想设置。
此代码与机器人2.3进行测试。 也许有必要对更高版本的变化。