单击editText时如何选择音频文件?

时间:2016-12-08 15:23:40

标签: android audio android-edittext

当点击片段类(ReminderPage)中的editText时,我希望它打开音频文件,以便我可以选择音乐文件作为铃声。

ringtone.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View arg0) {

                        Intent intent1 = new Intent();
                        intent1.setAction(Intent.ACTION_GET_CONTENT);
                        intent1.setType("audio/*");
                        startActivityForResult(
                                Intent.createChooser(intent1, "Choose Sound File"), 6);
                    }
                });

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data,Context context) {
        if (resultCode == getActivity().RESULT_OK && requestCode == 6) {
            Uri i = data.getData();  // getData
            String s = i.getPath(); // getPath
            File k = new File(s);  // set File from path
            if (s != null) {      // file.exists

                ContentValues values = new ContentValues();
                values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
                values.put(MediaStore.MediaColumns.TITLE, "ring");
                values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
                values.put(MediaStore.MediaColumns.SIZE, k.length());
                values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name);
                values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
                values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
                values.put(MediaStore.Audio.Media.IS_ALARM, true);
                values.put(MediaStore.Audio.Media.IS_MUSIC, false);

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

                try {
                    RingtoneManager.setActualDefaultRingtoneUri(
                            getActivity().ReminderPage, RingtoneManager.TYPE_RINGTONE,
                            newUri);
                } catch (Throwable t) {

                }
            }
        }
    }

但是我得到了错误,onActivityResult从未被使用....

  

错误:(473,42)错误:无法找到符号变量ReminderPage   错误:(443,5)错误:方法不会覆盖或实现方法   来自超类

更改为getActivity()。getContentResolver()和Reminder.this后,我收到新错误

  

错误:(444,20)错误:onActivityResult(int,int,Intent)in   ReminderPage不能覆盖onActivityResult(int,int,Intent)   片段尝试分配较弱的访问权限;是公开的   错误:(472,36)错误:类中的方法setActualDefaultRingtoneUri   RingtoneManager不能应用于给定类型;需要:   Context,int,Uri发现:ReminderPage,int,Uri reason:实际参数   无法通过方法调用将ReminderPage转换为Context   转化

2 个答案:

答案 0 :(得分:2)

对于第一个错误,请在调用getActivity().ReminderPage时尝试将getActivity()替换为setActualDefaultRingtoneUri

关于第二个错误:Fragment.onActivityResult方法中没有Context context参数,可见性应为public。在覆盖它时,您必须尊重该方法的签名。

替换

protected void onActivityResult(int requestCode, int resultCode, Intent data,Context context) {

通过

public void onActivityResult(int requestCode, int resultCode, Intent data) {

并替换

context.getContentResolver()

通过

getActivity().getContentResolver()

答案 1 :(得分:1)

这一行可能是问题所在:

getActivity().ReminderPage

你可以使用

getActivity()
相关问题