Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为铃声创建的文件不';我没有声音_Android_Android File_Ringtone - Fatal编程技术网

Android 为铃声创建的文件不';我没有声音

Android 为铃声创建的文件不';我没有声音,android,android-file,ringtone,Android,Android File,Ringtone,我让我的应用程序从原始文件夹获取文件,并将该文件设置为铃声。 但有一个问题,文件被创建并设置为铃声: 但该文件并没有任何声音,idk为什么我猜测默认情况下我的设备正在播放另一个铃声。 这是我的密码: case 64: String path = "android.resource://" + getPackageName() + "/"+R.raw.fusrodah; File k= new File(path); Log.i("OUTPUT", path

我让我的应用程序从原始文件夹获取文件,并将该文件设置为
铃声
。 但有一个问题,文件被创建并设置为铃声: 但该文件并没有任何声音,idk为什么我猜测默认情况下我的设备正在播放另一个铃声。 这是我的密码:

case 64:        
    String path = "android.resource://" + getPackageName() + "/"+R.raw.fusrodah;
    File k= new File(path);
    Log.i("OUTPUT", path);

    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DATA, k .getPath());
    values.put(MediaStore.MediaColumns.TITLE, "Fusrodah File");
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg");
    values.put(MediaStore.Audio.Media.ARTIST, "Testing");
    values.put(MediaStore.MediaColumns.SIZE, 215454);
    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());
    getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null);
    Uri newUri = getContentResolver().insert(uri, values);

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

    break;
我做错了什么? 有什么我遗漏的吗?
我拥有所有权限,文件已创建但没有任何声音。

看起来您应该先将文件复制到SD卡,然后将此副本用作铃声。这里是完整的代码示例(我的资产中有文件“kalimba.mp3”):


我该怎么做呢?在我的答案中添加复制方法。希望它对你有用!还有一个问题,我如何确定我的文件将保存在哪里?所以我可以得到路径。你可以使用out.getPath(),或者out.getAbsolutePath(),如果你需要的话。对不起,又是我。我试过使用你上面写的代码,但我无法让它工作。还有别的办法吗?或者你能至少在我上面的代码中添加你的部分代码吗?
private int size;

private static final int BUFFER_LEN = 1024;

private void copyFile(AssetManager assetManager, String fileName, File out) throws FileNotFoundException, IOException {
    size = 0;
    FileOutputStream fos = new FileOutputStream(out);
    InputStream is = assetManager.open(fileName);       
    int read = 0;
    byte[] buffer = new byte[BUFFER_LEN];
     while ((read = is.read(buffer, 0, BUFFER_LEN)) >= 0) {
            fos.write(buffer, 0, read);
            size += read;
      }
    fos.flush();    
    fos.close();
    is.close();
}

@Override
public void onClick(View arg0) {        
    AssetManager assetManager = getAssets();

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

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

    File out = new File(path + "/", "kalimba.mp3");     
    if(!out.exists()){
        try {
            copyFile(assetManager, "kalimba.mp3", out);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }           

    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DATA, out.getAbsolutePath());
    values.put(MediaStore.MediaColumns.TITLE, "name");
    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(this,    RingtoneManager.TYPE_RINGTONE, newUri);
        Settings.System.putString(mCr, Settings.System.RINGTONE,
                newUri.toString());
    } 
    catch (Throwable t) 
    {
        //TODO Handle exception
    }

}