public void play(String path){ Log.d(TAG,"play"); try{ player.reset(); player.setDataSource(path); AudioAttributes attrs = new AudioAttributes.Builder() .setLegacyStreamType(AudioManager.STREAM_MUSIC) .build(); player.setAudioAttributes(attrs); //player.setAudioAttributes(AudioManager.STREAM_MUSIC); player.prepareAsync(); player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { player.start(); addTimer(); } });改怎么修改
时间: 2024-02-10 14:16:07 浏览: 131
您可以将 `setAudioAttributes` 方法注释掉,然后使用 `setAudioStreamType` 方法来设置音频流的类型,如下所示:
```
public void play(String path) {
Log.d(TAG, "play");
try {
player.reset();
player.setDataSource(path);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.prepareAsync();
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
player.start();
addTimer();
}
});
}
// ...
}
```
请注意,`setAudioStreamType` 方法已经被标记为过时,但是在较旧的 Android 版本上仍然可以使用。如果您的应用程序目标为 Android 26 及更高版本,则需要使用 `setAudioAttributes` 方法来设置音频属性。
相关问题
public static MediaPlayer create(Context context, int resid, AudioAttributes audioAttributes, int audioSessionId) { try { AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid); if (afd == null) return null; MediaPlayer mp = new MediaPlayer(audioSessionId); final AudioAttributes aa = audioAttributes != null ? audioAttributes : new AudioAttributes.Builder().build(); mp.setAudioAttributes(aa); mp.native_setAudioSessionId(audioSessionId); mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); afd.close(); mp.prepare(); return mp; } catch (IOException ex) { Log.d(TAG, "create failed:", ex); // fall through } catch (IllegalArgumentException ex) { Log.d(TAG, "create failed:", ex); // fall through } catch (SecurityException ex) { Log.d(TAG, "create failed:", ex); // fall through } return null; }
这是另一个创建 MediaPlayer 对象的静态方法,它接受一个资源 ID、AudioAttributes 对象和音频会话 ID 作为参数。在方法内部,它使用上下文和资源 ID 来获取 AssetFileDescriptor 对象,并使用该对象设置 MediaPlayer 的数据源。然后,它设置音频属性、声音会话 ID,并准备 MediaPlayer 对象。如果在创建过程中出现了异常,该方法将返回 null。
解释这段代码String path = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA)); MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(path); String duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
这段代码是用于获取视频文件的路径,并使用MediaMetadataRetriever类获取视频文件的时长。具体来说,首先通过cursor对象获取视频文件的路径,然后使用MediaMetadataRetriever类的setDataSource方法设置数据源为该路径,最后使用extractMetadata方法获取视频文件的时长。
阅读全文