Android 故障设置位置到录制的音频

Android 故障设置位置到录制的音频,android,audio,recorder,Android,Audio,Recorder,我必须在Android上启动以下代码和录音机: final Intent recordSoundIntent = new Intent ("android.provider.MediaStore.RECORD_SOUND"); String fileName = Environment.getExternalStorageDirectory() + File.separator + UUID.randomUUID() + ".3gpp"; recordSoundIntent.putExtra(M

我必须在Android上启动以下代码和录音机:

final Intent recordSoundIntent = new Intent
("android.provider.MediaStore.RECORD_SOUND");
String fileName = Environment.getExternalStorageDirectory() +
File.separator + UUID.randomUUID() + ".3gpp";
recordSoundIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new
File(fileName)));
startActivityForResult(Intent.createChooser(recordSoundIntent,
getString(R.string.record_sound_chooser)), INTENT_SOUND_RECORDING);
我的问题如下:

我的文件名(filename)无效,从 data.getData()在上次测试运行中返回:content://media/external/audio/media/41. 但是,此文件是在我的SD卡上创建的:recording34485.3gpp。如果是 无法在创建声音时设置自定义位置,因为它是
我想要此文件的位置。

正在处理相同的问题。无法找到直接设置位置的方法,但找到了获取和重命名位置的解决方案

处理文件名时,使用java.io.file.renameTo()重命名文件。您需要在清单文件中使用android.permission.WRITE_EXTERNAL_存储,重命名才能生效

下面是我的测试代码示例:

public static final int REQUEST_RECORD_SOUND = 7;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main2);

    Button button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent intent  = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
            startActivityForResult(intent, REQUEST_RECORD_SOUND);
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (requestCode == REQUEST_RECORD_SOUND){
        String sourcePath = getRealPathFromURI(intent.getData());
        File root = Environment.getExternalStorageDirectory();
        String destPath = root.getPath() + File.separator + "newName.txt";
        File sourceF = new File(sourcePath);
        try {
            sourceF.renameTo(new File(destPath));
        } catch (Exception e) {
            Toast.makeText(this, "Error:" + e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }
}

/**
 * from:
 * https://stackoverflow.com/questions/3401579/get-filename-and-path-from-uri-from-mediastore
 */
public String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

我在处理同一个问题。无法找到直接设置位置的方法,但找到了获取和重命名位置的解决方案

处理文件名时,使用java.io.file.renameTo()重命名文件。您需要在清单文件中使用android.permission.WRITE_EXTERNAL_存储,重命名才能生效

下面是我的测试代码示例:

public static final int REQUEST_RECORD_SOUND = 7;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main2);

    Button button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent intent  = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
            startActivityForResult(intent, REQUEST_RECORD_SOUND);
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (requestCode == REQUEST_RECORD_SOUND){
        String sourcePath = getRealPathFromURI(intent.getData());
        File root = Environment.getExternalStorageDirectory();
        String destPath = root.getPath() + File.separator + "newName.txt";
        File sourceF = new File(sourcePath);
        try {
            sourceF.renameTo(new File(destPath));
        } catch (Exception e) {
            Toast.makeText(this, "Error:" + e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }
}

/**
 * from:
 * https://stackoverflow.com/questions/3401579/get-filename-and-path-from-uri-from-mediastore
 */
public String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

有什么建议吗??sdk 2.3怎么样?有什么建议吗??那么SDK2.3呢