我希望将integer值从Activity类(PlayListActivity.java)传递给我的Service(AudioService.java)类。但当我单击ListItem时,我的应用程序就会停止。我想不出错误是什么。希望有人能帮我
logCat中的错误:
java.lang.RunTimeException: error recieveing broadcast Intent {act-com.exaple.serviceaudio.AudioService.PLAY_SONG flg=0x10 (has extras)} in com.example.serviceaudio.AudioService$AudioPlayerBroadcastReciever@41b4e818.........这是我的代码。
PlayLlistActivity.java
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
playSongSong(position);
}});
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
unbindService(serviceConnection);
super.onDestroy();
}
public void playSongSong(int songIndex){
Intent intent = new Intent(AudioService.PLAY_SONG);
intent.putExtra("songIndex", songIndex);
this.sendBroadcast(intent);
}AudioService.java
public static final String PLAY_SONG_BASE = "com.example.serviceaudio.AudioService";
public static final String PLAY_SONG = PLAY_SONG_BASE + ".PLAY_SONG";
private AudioPlayerBroadcastReceiver broadcastReceiver = new AudioPlayerBroadcastReceiver();
@Override
public void onCreate() {
Log.v("AudioService", "AudioPlayer: onCreate() called");
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(PLAY_SONG);
registerReceiver(broadcastReceiver, intentFilter);
}
public void onDestroy() {
unregisterReceiver(broadcastReceiver);
}
private class AudioPlayerBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
int currentSongIndex = intent.getExtras().getInt("songIndex");
if(PLAY_SONG.equals(action)) {
Log.d("AudioService", "Action not recognized: " + action);
playSong(currentSongIndex);
}}当我注释int currentSongIndex = intent.getExtras().getInt("songIndex");和``playSong(CurrentSongIndex)时,没有错误,但什么也没做。
发布于 2013-08-26 17:12:24
BroadcastReceiver对象仅在调用onReceive(Context,Intent)期间有效。一旦您的代码从此函数返回,系统就会认为该对象已完成并且不再处于活动状态。
这对您在onReceive(Context,Intent)实现中可以做的事情有重要的影响:任何需要异步操作的操作都不可用,因为您将需要从函数返回以处理异步操作,但此时BroadcastReceiver不再处于活动状态,因此系统可以在异步操作完成之前自由地终止其进程。
简而言之,广播接收机的寿命很短,而且不能在其中做任何长时间运行的任务。在最大限度上,试着提出一个意图,并在那里做工作。
这对你造成了崩溃,当你评论它对你很好的时候。
发布于 2013-08-26 17:18:31
当你遇到问题时,有一个最好的方法来使用活动的数据,即通过共享首选项从活动中存储值,如下所示:
String share_pref_file = "song_index_file";
SharedPreferences prefs1 = getSharedPreferences(
share_pref_time_file, Context.MODE_PRIVATE);
SharedPreferences.Editor editor1 = prefs1.edit();
editor1.putString("songIndex", formattedDate);
editor1.commit();并像这样从服务中获取它:
String share_pref_file = "song_index_file";
SharedPreferences prefs = getSharedPreferences(share_pref_file,
Context.MODE_PRIVATE);
String strJson = prefs.getString("songIndex", "");这个技巧可能会对你有所帮助。
https://stackoverflow.com/questions/18440364
复制相似问题