1
私のアプリケーションには、ユーザーが電話から着信音を選択できるボタンがあります。そのコードは次のようになります。ユーザー入力からのAndroidの再生着信音uri
public void Btn_Ringtone_Click(View v){
Intent intent_upload = new Intent();
intent_upload.setType("audio/*");
intent_upload.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent_upload,1);
}
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
if((requestCode == 1) && (resultCode == RESULT_OK)){
ringtoneUri = data.getData();
ringtoneLabel.setText(ringtoneUri.toString());
}
super.onActivityResult(requestCode, resultCode, data);
}
これは動作しているようです。
後で、同じUriをMedia Playerと共に使用して、選択した着信音を再生したいと思います。私のコードは次のようになります。
@Override
public int onStartCommand(Intent intent, int flags, int startId){
Log.i("My tag...", "Service started");
String uriAsString = intent.getStringExtra("ASM_URI");
Log.i("My tag...", uriAsString);
//Uri uri = Uri.parse(uriAsString);
//Uri uri = Uri.parse(uriAsString.replace("file:/", "file:///"));
Uri uri = getContentUriForPath(uriAsString);
MediaPlayer mp = new MediaPlayer();
mp.create(this, uri);
//mp = MediaPlayer.create(this, uri);
//mp = MediaPlayer.create(this, Settings.System.DEFAULT_RINGTONE_URI);
/*
try {
mp.setDataSource(getApplicationContext(), uri);
}
catch (IOException e) {
e.printStackTrace();
}
Ringtone ringtone = RingtoneManager.getRingtone(getApplicationContext(), uri);
ringtone.play();
mp.start();
this.stopSelf();
*/
//return super.onStartCommand(intent, flags, startId);
return START_NOT_STICKY;
}
これは私が試したことであり、これまでコメントしていたコードが残っています。
私は問題が許可、ファイルの場所、またはURIそのものと関係していると考えています。しかし、私はそれを解決することはできません。権限については
私が追加:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
をマニフェストファイルに。
私のログによると、URIは次のようになります。
内容://メディア/外部/オーディオ/メディア/ 3250
それはdidnの...右のようではありませんファイルが選択された後、着メロのラベルにはそのように見えません。
質問:ローカルファイルからURIを正しく選択、保存、再生するにはどうすればよいですか?私は、これはあなたを助けるだろうと思い