【问题标题】:Ringtone and contact tone not set Programatically未以编程方式设置铃声和联系音
【发布时间】:2015-12-11 16:43:19
【问题描述】:

我正在制作一个应用程序,在其中我从服务器下载铃声并保存在 sdcard/下载中并设置为警报、通知、铃声和联系音,但是当我设置它时,它没有设置为联系人和铃声,而是通知、警报音设置在哪里是我的代码中的错误,其次是通过 /sdcard/download/ 音调在通过 /Download/ 时没有保存在 ome 手机中

    ringtone.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String path = Environment.getExternalStorageDirectory().getPath() + "/Download/" + title;
                        setRingtone(path);
                        Toast.makeText(con, "set successfully as ringtone"+title, Toast.LENGTH_LONG).show();
                        dialog.dismiss();

                    }
                });

                alaram.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String path = Environment.getExternalStorageDirectory().getPath() + "/Download/" + title;
                        setalaram(path);
                        Toast.makeText(con, "set successfully as alaram", Toast.LENGTH_LONG).show();
                        dialog.dismiss();

                    }
                });

                notification.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String path = Environment.getExternalStorageDirectory().getPath() + "/Download/" + title;
                        setnotication(path);
                        Toast.makeText(con, "set successfully as notification", Toast.LENGTH_LONG).show();
                        dialog.dismiss();

                    }
                });
               /* contact.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                    String path = Environment.getExternalStorageDirectory().getPath() + "/Download/" + title;
                        Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                        startActivityForResult(intent, PICK_CONTACT);
                        dialog.dismiss();
                    }
                });*/

            }
        });
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode)
        {
            case 1:
                if (resultCode == Activity.RESULT_OK)
                    urlRingTone = String.valueOf(data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI));
                    break;
                case 2:
                        Uri contactData = data.getData();
                        Cursor c = managedQuery(contactData, null, null, null, null);
                        if (c.moveToFirst()) {
                            String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                            String path = Environment.getExternalStorageDirectory().getPath() + "/Download/" + title;
                            //setContact(path);
                        }

            }

        }
public void setalaram(String path) {


        File k = new File(path); // path is a file to /sdcard/media/ringtone

        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, title);
        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
        values.put(MediaStore.MediaColumns.SIZE, k.length());
        values.put(MediaStore.Audio.Media.IS_ALARM, true);

        Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
        getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null);
        Uri newUri = getContentResolver().insert(uri, values);

        RingtoneManager.setActualDefaultRingtoneUri(Play.this,
                RingtoneManager.TYPE_ALARM, newUri);
    }

    public void setnotication(String path) {


        File k = new File(path); // path is a file to /sdcard/media/ringtone

        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, title);
        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
        values.put(MediaStore.MediaColumns.SIZE, k.length());
        values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);

        Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
        getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null);
        Uri newUri = getContentResolver().insert(uri, values);

        RingtoneManager.setActualDefaultRingtoneUri(Play.this,
                RingtoneManager.TYPE_NOTIFICATION, newUri);
    }

【问题讨论】:

    标签: java android xml android-intent android-activity


    【解决方案1】:

    记住,铃声必须使用:RingtoneManager.TYPE_RINGTONE

    RingtoneManager.setActualDefaultRingtoneUri(
      Play.this,
      RingtoneManager.TYPE_RINGTONE,
      newUri
    );  
    

     values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
    

    检查这个完整的例子:

    File k = new File(path, "Queen-BohemianRhapsody.mp3"); 
    
    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
    values.put(MediaStore.MediaColumns.TITLE, "Bohemian Rhapsody");
    values.put(MediaStore.MediaColumns.SIZE, 188080);
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
    values.put(MediaStore.Audio.Media.ARTIST, "Queen");
    values.put(MediaStore.Audio.Media.DURATION, 230);
    values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
    values.put(MediaStore.Audio.Media.IS_ALARM, false);
    values.put(MediaStore.Audio.Media.IS_MUSIC, false);
    
    Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
    Uri newUri = this.getContentResolver().insert(uri, values);
    
    RingtoneManager.setActualDefaultRingtoneUri(myActivity,
      RingtoneManager.TYPE_RINGTONE,  newUri);  
    

    【讨论】:

    • 感谢您的回复,所以我已经在我们的应用程序中使用了此代码,但没有设置为铃声和联系音!!
    • 当我将自定义铃声设置为铃声时,来电铃声不响
    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    相关资源
    最近更新 更多