【问题标题】:How to select audio file when editText is clicked?单击editText时如何选择音频文件?
【发布时间】:2016-12-08 15:23:40
【问题描述】:

单击片段类(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 found: ReminderPage,int,Uri 原因: 实际参数 ReminderPage 无法通过方法调用转换为 Context 转化

【问题讨论】:

    标签: android audio android-edittext


    【解决方案1】:

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

    关于第二个错误: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()
    

    【讨论】:

    • 如果我删除上下文上下文,上下文将无法解析
    • onActivityResult 必须有一个准确的签名。您不能向其中添加新参数。如果你需要另外的参数,你需要将它存储在类的实例级变量中。
    • @fiddler 谢谢。你知道如何解决其他错误吗?
    • @GabeSechan 再次检查我的帖子。谢谢
    • @AI。父类中的函数是公共的。您不能使其更具限制性(受保护或私有),您必须将其保持为开放或更开放(在这种情况下必须保持公开)。我建议你阅读Java继承,你似乎有点弱。
    【解决方案2】:

    这行可能是问题所在:

    getActivity().ReminderPage
    

    你可以使用

    getActivity()
    

    【讨论】:

    • 好吧,我还以为里面有一个这样的类,而不是 ReminderPage.this 如果你试图传递实例
    • 我错过了你写的 ReminderPage 是一个片段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多