2010-03-13 22 views
6

Yalnızca seçilen kişiye nasıl zil sesi uygulayabilirim?Android'de bir kişi için bir zil sesini nasıl ayarlayabilirim?

Tüm kişiler için geçerli varsayılan zil sesini ayarlamanın bir yolunu buldum, ancak bu benim amacım değil.

Bir uygulamanın tıklatıldığında, telefondaki tüm kişilerin bir listesini görüntüleyen bir activityForResult başlatan bir düğmenin ("Kişiye zil sesi uygula") sahip olmasını istiyorum. Bir kişi seçildiğinde, temas etkinliği kontağa URI ile kapanır ve geri döner. Ardından, uygulamanın seçilen zil sesini söz konusu kişiye göndermesi gerekir.

Bir etkinliğe göre kişi görüntüleme ve seçme kodu zaten uygulanmış ve uygulama üzerinde çalışıyor gibi görünüyor.

+1

bir şekilde Manifest dosyasında tüm bu izinleri dahil droid.provider.ContactsContract.ContactOptionsColumns zil sesi URI için CUSTOM_RINGTONE var, bu yüzden seçili zil sesi – skyman

cevap

10

Bu amaç için CUSTOM_RINGTONE numaralı bir sütun içeren (bu bir okuma/yazma sütunu olan!) ContactsContract.Contacts kullanabilirsiniz.

Uri contactUri; 
ContentValues values = new ContentValues(); 
values.put(ContactsContract.Contacts.CUSTOM_RINGTONE, 
    newRingtoneUri.toString()); 
context.getContentResolver().update(contactUri, values, where, args); 

Ayrıca, this discussion yararlı (orada alınan kodu) olabilir.

+0

için seçili kişiyi CUSTOM_RINGTONE ile güncelleştirmek mümkün olmalıdır Teşekkürler, Bu çok yararlı bir tartışma oldu. Pek çok şey, Google’ın dokümantasyon ve örneklerinin eksikliği hakkında sinirli geliştiriciler. Yapıştırılan kodunuzu deneyeceğim. Umarım 1.5 -> 2.1 üzerinde çalışmak ... Şu anda uygulama sadece 1.5 ve 1.6, 2.0 ya da 2.1 için değil, sadece geçerli çalışır ... Kod, Magic, Hero ve G1 için çalışıyor, ama DROID için değil veya Nexus –

+0

Vidar Vestnes Kişiye zil sesini ayarlamak için son kodu gönderir misiniz? Bir Müzik dosyasının URL'sini "ContentValues" e nasıl alacağımı ve sağladığımı bilmiyorum. – Sourav301

+0

benim zil sesi uzantısı her zaman ogg olmalı veya ben mp3 uzantılı kullanabilirsiniz? – Glolita

0

bu kadar geç olduğunu biliyorum ama biri yukarıda benim için çalıştı çünkü burada post ediyorum

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(); 
    } 

Not: Biz

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; 
} 
olarak bataklık ebegümeci için çalışma zamanı izinleri eklemek zorunda

ve ayrıca

<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" /> 
İlgili konular