- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
请教我如何解决 MediaPlayer 错误。我有 Mediaplayer、MediaController 和 listview。当我触摸列表时,歌曲会从 MediaController 开始,但是当我触摸 keycode_home
并重新启动我的应用程序时,会发生错误。这是我的代码和错误。
java.lang.RuntimeException: Unable to resume activity {}:
java.lang.IllegalStateException
Caused by: java.lang.IllegalStateException at android.media.MediaPlayer.getCurrentPosition(Native Method)
int si[]={R.raw.sample1,R.raw.sample2,R.raw.sample3};
onCreate
ItemBean IB1 = new ItemBean();
IB1.setName("sample1");
IB1.setUrl("http~");
ItemBean IB2 = new ItemBean();
IB2.setName("sample2");
IB2.setUrl("http~");
ItemBean IB3 = new ItemBean();
IB3.setName("sample3");
IB3.setUrl("http~");
List<ItemBean> list = new ArrayList<ItemBean>();
list.add(IB1);
list.add(IB2);
list.add(IB3);
mp = new MediaPlayer();
controller = new MediaController(this);
controller.setAnchorView(findViewById(R.id.mediaController));
controller.setMediaPlayer(this);
list2 = (ListView) findViewById(R.id.song_list);
SonglistAdapter_test adapter = new SonglistAdapter_test(getApplicationContext(),list);
list2.setAdapter(adapter);
list2.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
try {
mp.reset();
mp.release();
mp = MediaPlayer.create(SongsActivity.this,si[position]);
} catch (Exception e) {}
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
handler.post(new Runnable() {
@Override
public void run() {
controller.setEnabled(true);
controller.show(mp.getDuration());
mp.start();
try {
Method m = android.widget.MediaController.class.getDeclaredMethod("updatePausePlay");
m.setAccessible(true);
m.invoke(controller);
} catch (Exception e) {
}
}
});
}
});
}
@Override
public void start(){
mp.start(); }
@Override
public void pause(){
mp.pause(); }
@Override
public int getDuration(){
return mp.getDuration(); }
@Override
public int getCurrentPosition(){
return mp.getCurrentPosition(); }
@Override
public void seekTo(int pos){
mp.seekTo(pos); }
@Override
public boolean isPlaying(){
return mp.isPlaying(); }
@Override
public int getBufferPercentage(){
return 0; }
@Override
public boolean canPause(){
return true; }
@Override
public boolean canSeekBackward(){
return true; }
@Override
public boolean canSeekForward(){
return true; }
@Override
public int getAudioSessionId(){
return 0; }
@Override
protected void onPause(){
super.onPause();
}
@Override
protected void onResume(){
super.onResume();
}
@Override
protected void onStop(){
super.onStop();
controller.hide();
mp.stop();
mp.release();
}
@Override
public void onRestart(){
super.onRestart();
controller.show();
}
@Override
protected void onDestroy(){
super.onDestroy();
finish();
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
finish();
}
return super.dispatchKeyEvent(event);
}
最佳答案
问题出在您的 onStop()
方法中 - 您正在那里释放媒体播放器,并且在 onRestart()
期间显示 Controller 之前没有重新创建它。 onStop()
方法与 onDestroy()
不同 - onStop()
并不意味着您的 Activity 一定会运行恢复时再次onCreate()
。
您应该看看 Activity Lifecycle更好地了解这些事件何时发生。
关于java - MediaPlayer 错误 - getCurrentPosition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24892707/
这个问题已经有答案了: How do I return the response from an asynchronous call? (42 个回答) 已关闭 7 年前。 我正在尝试将用户当前位置置
这是我的: var position; navigator.geolocation.getCurrentPosition(onSuccess, onError); function on
我正在开发一款不断需要用户当前位置的应用程序。 我遇到了一个问题,即设备第一次获取用户当前位置的纬度和经度并将其缓存起来,我认为每次都返回相同的纬度和经度。有没有办法从设备中删除缓存位置?任何帮助将不
我一直在开发一个使用 getCurrentPosition() 的应用,但它在最新版本的 Chrome 中不再起作用,请参阅: Deprecating Powerful Features on Ins
我正在使用谷歌地理定位的 getCurrentPosition() 函数来获取用户的当前位置。 它在 Firefox 中运行良好,但在 chrome 中不起作用。 我的代码如下:: Click
我试图通过本地 IPv4 地址连接到本地计算机上托管的网站,通过 navigator.geolocation.getCurrentPosition 访问我的手机的地理位置。问题是,当从我的手机运行代码
我想从 getCurrentPosition() 方法获取坐标,以便可以在其他方法中使用它,但我无法做到这一点。 这是我的 HTML 这是我的 JavaScript 代码 var x = docum
我正在尝试初始化一个以当前用户位置为中心并带有标记的 map 。在本地,一切都很好,但是当我将 html 页面部署到 Google Appengine 时,它只显示 map ,没有地理定位....
我有一个关于 geolocation.getCurrentPosition() 的问题 我有以下代码: $(document).on('click', '#find_pickupStoresNearM
我正在使用 getCurrentPosition 获取本地纬度和经度。我知道这个函数是异步的,只是想知道如何返回可以被其他函数访问的纬度和经度值? function getGeo() {
我正在使用 android.media.MediaPlayer 在我的 Android 应用程序中播放歌曲。我的应用程序中的某些事件是在歌曲的某些部分触发的。要知道我现在在歌曲中的哪个位置,我使用 M
这个问题在这里已经有了答案: How do I return the response from an asynchronous call? (41 个回答) 关闭 7 年前。 我试图获取这些变量:
你能帮我解决这个问题吗?我有一个从 url 流式传输的搜索栏,我想在 textView 中显示 mediaplayer 的 currentTime,那么如何更新 textview 以每秒获取 curr
我的 cordova 版本是 6.3.1,我使用的是 cordova-plugin-geolocation 2.3.0。 在调用 navigator.geolocation.getCurrentPos
我尝试这个(为了在页面加载时获取当前用户位置) angular.module('ionicApp', ['ionic']) .controller('MyCtrl', function($scope)
我有这个 html 页面: Geolocation test navigator.geolocation.getCurrentPosition(functi
请教我如何解决 MediaPlayer 错误。我有 Mediaplayer、MediaController 和 listview。当我触摸列表时,歌曲会从 MediaController 开始,但是当
我遵循了 Igor Khrupin 关于使用 MediaPlayer 类在 Android 中流式传输 mp3 文件的教程:http://www.hrupin.com/2011/02/example-
我正在编写一个短音频持续时间(通常为 1-5 秒)的音频播放器,如下所示 //start media player mediaPlayer = new MediaPlayer(); mediaPlay
我正在使用一个 SeekBar 来显示音频文件的进度和搜索到某个时间。为了更新,我使用了一个 Runnable,它每隔一秒左右在 MediaPlayer 上调用 getCurrentPosition(
我是一名优秀的程序员,十分优秀!