将铃声设置为单个联系人不适用

时间:2013-12-09 08:36:21

标签: android android-intent mp3 android-contentprovider android-contacts

正如很多人在这里问的那样,我通过以下链接找出了为特定联系人设置自定义响铃的过程:

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

0 个答案:

没有答案