android - onItemClick 监听器未定义方法 copyFile(AssetManager, String, File)

标签 android methods copy

我正在制作 Android 应用程序,我希望当我单击 ListView 时从单击的项目中获取 ID、获取文件、复制该文件并将其设置为铃声。 但我收到这个错误 new AdapterView.OnItemClickListener() 类型未定义方法 copyFile(AssetManager, String, File){}

    l.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

            String selectedName = l.getContext().toString();

            AssetManager assetManager = getAssets();

            File file = new File(Environment.getExternalStorageDirectory(),
                    "/myRingtonFolder/Audio/");
            if (!file.exists()) {
                file.mkdirs();
            }

            String path = Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + "/FunnysoundsRingtones/Audio/";

            File out = new File(path + "/", selectedName);     
            if(!out.exists()){
                copyFile(assetManager, "Yeah.mp3", out);
            }           

            ContentValues values = new ContentValues();
            values.put(MediaStore.MediaColumns.DATA, out.getAbsolutePath());
            values.put(MediaStore.MediaColumns.TITLE, "RINGTONE");
            values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
            values.put(MediaStore.MediaColumns.SIZE, out.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, true);

            Uri uri = MediaStore.Audio.Media.getContentUriForPath(out.getAbsolutePath());
            ContentResolver mCr = getContentResolver();
            Uri newUri = mCr.insert(uri, values);

            try {
                RingtoneManager.setActualDefaultRingtoneUri(
                         getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri);
                Settings.System.putString(mCr, Settings.System.RINGTONE,
                        newUri.toString());
            } 
            catch (Throwable t) 
            {
                //TODO Handle exception
            }

            switch (position) {
            case 0:
                 if(mp!=null)
                    {
                        mp.release();
                        mp=null;
                    }

                    mp = MediaPlayer.create(MainActivity.this, R.raw.getchopa);
                    mp.start();


                break;
            case 1:

我该如何解决这个问题? 我还应该使用其他方法吗?

最佳答案

使用

InputStream in = assetManager.open(filename);

然后

private void copyFile(InputStream in, OutputStream out) throws IOException {
      byte[] buffer = new byte[1024];
      int read;
      while((read = in.read(buffer)) != -1){
        out.write(buffer, 0, read);
      }
}

关于android - onItemClick 监听器未定义方法 copyFile(AssetManager, String, File),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22036934/

相关文章:

android - 有人可以解释 'putExtra()' 方法吗?请简单具体

java - SWT:更好地使用新的 display.shell 方法?

java - 文件在 Java 中复制自身

c# - 复制类的引用和复制值的区别

android - onContextItemSelected 为 fragment 调用了两次

android - Firebase UI Recyclerview OnClick 不工作,尝试了一切。这不是一个重复的问题

在 fragment 中声明 findViewById 后出现 java.lang.NullpointerException

ruby - # Ruby 中识别方法约定的基本原理/历史是什么?

java - 无法启用 JNI 调试器

C# 跟踪复制的文件