1
このアプリケーションでは、デフォルトの音楽を再生できますが、MediaStoreを使用して再生する別の音楽を選択しようとすると、 mediastoreのページでは、選択した音楽をうまく再生することができますが、「ok」ボタンをクリックして自分の選択を確定すると、もう音楽を再生できません。なぜこのようなことが起こったのか分かりません。私はあなたの助けを喜んでいます!Mediastoreの "ok"ボタンをクリックしても選択した音楽を再生できません
次は、次は私がオンラインこの問題を検索し、私はすでにmediaPlayer.prepareAsync()とonPrepared(MediaPlayerのを)使用したが、logcat
05-16 16:42:04.243 14390-14390/com.example.a12086.app_sensor E/MediaPlayer: pause called in state 1, mPlayer(0x0)
05-16 16:42:04.244 14390-14390/com.example.a12086.app_sensor E/MediaPlayer: error (-38, 0)
あるコード
public class MUSIC extends AppCompatActivity implements SensorEventListener,MediaPlayer.OnPreparedListener,GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener,LocationListener {
private Button JoggingButton,BikingButton;
private SensorManager mSensormanager;
private Sensor accelerometer;
private final float NOISE = (float) 2.0;
private boolean initialization;
private float mLastX, mLastY, mLastZ;
private static final String TAG = "sensor";
private MediaPlayer mediaPlayer1;
private MediaPlayer mediaPlayer2;
private double measurement;
private double speed;
private boolean jogging=false,biking=false;
private Uri urijogging,uribiking;
private LocationManager locationManager;
private GoogleApiClient googleApiClient;
private LocationRequest locationRequest;
private final static int MY_PERMISSION_REQUEST_FINE=100;
private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST=9000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music);
mediaPlayer1 = new MediaPlayer();
mediaPlayer2 = new MediaPlayer();
JoggingButton=(Button)findViewById(R.id.button3);
BikingButton=(Button)findViewById(R.id.button4);
if(accelerometer!=null){
if(urijogging==null){
Prepareplay(mediaPlayer1,Uri.parse("android.resource://"+getPackageName()+ "/raw/jogging1"));
}else{
Prepareplay(mediaPlayer1,urijogging);
}
if(uribiking==null){
Prepareplay(mediaPlayer2,Uri.parse("android.resource://"+getPackageName()+ "/raw/biking1"));
}else{
Prepareplay(mediaPlayer2,uribiking);
}
mediaPlayer1.start();
mediaPlayer2.start();
JoggingButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mediaPlayer1.release();
mediaPlayer1=new MediaPlayer();
Intent intent=new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 10);
}
});
BikingButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mediaPlayer2.release();
mediaPlayer2=new MediaPlayer();
Intent intent=new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 11);
}
});
Toast.makeText(getApplicationContext(), "Current speed:"+String.valueOf(speed),Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(),"Sorry,there are no accelerometers on your device",Toast.LENGTH_LONG).show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK && requestCode == 10){
urijogging=data.getData();
Toast.makeText(getApplicationContext(),String.valueOf(urijogging),Toast.LENGTH_LONG).show();
Joggingplay(this,urijogging);
}
if(resultCode == RESULT_OK && requestCode == 11){
uribiking=data.getData();
Toast.makeText(getApplicationContext(),String.valueOf(uribiking),Toast.LENGTH_LONG).show();
Bikingplay(this,uribiking);
}
}
private void Joggingplay(Context context, Uri uri) {
try {
mediaPlayer1.setDataSource(context, uri);
mediaPlayer1.setOnPreparedListener(this);
mediaPlayer1.prepareAsync();
onPrepared(mediaPlayer1);
mediaPlayer1.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void Bikingplay(Context context, Uri uri) {
try {
mediaPlayer2.setDataSource(context, uri);
mediaPlayer2.setOnPreparedListener(this);
mediaPlayer2.prepareAsync();
onPrepared(mediaPlayer2);
mediaPlayer2.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
mediaPlayer.pause();
}
public void Prepareplay(MediaPlayer player, Uri uri){
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
player.setDataSource(getApplicationContext(), uri);
} catch (IOException e) {
e.printStackTrace();
}
try {
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ですそれでも動作しません。選択した音楽はMediaStoreページでしか再生できません。私はそのことについて混乱しています...
なぜ始動後にonPreparedで一時停止しますか? – Kaushal28
最後に、ストレージへのアクセス権を要求する必要があり、マニフェストでのアクセス権の追加だけでは不十分であることがわかりました。誰かを助けてくれることを願って –