2011-01-10 6 views
0

にトラブル集合場所と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); 

私の問題は以下のとおりです。 Uriは から戻りました。最後のテスト実行でdata.getData()が返されます。content:// media/external/audio/media/41。 ただし、このファイルは自分のSDカード:recording34485.3gppに作成されます。 がサウンドの作成時にカスタムロケーションを設定できない場合は、このファイルへの位置は です。

+0

は、任意の提案を持っています?どのようにsdk 2.3について – herbertD

答えて

4

同じ問題が発生していました。場所を直接設定する方法を見つけることができませんでしたが、名前を変更して名前を変更するという解決策を見つけました。

ファイル名の取得にはhereが使用され、ファイルはjava.io.File.renameTo()を使用してリネームされます。名前を変更するには、マニフェストファイルでandroid.permission.WRITE_EXTERNAL_STORAGEが必要です。ここで

は私のテストコードの例です:

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); 
} 
関連する問題