Android 广播接收机传递值错误

Android 广播接收机传递值错误,android,android-broadcast,Android,Android Broadcast,我想将活动类(playlativity.java)中的整数值传递给我的服务(AudioService.java)类。但是当我点击列表项时,我的应用程序停止了。我想不出这个错误。希望有人能帮助我 logCat中的错误: java.lang.RunTimeException: error recieveing broadcast Intent {act-com.exaple.serviceaudio.AudioService.PLAY_SONG flg=0x10 (has extras)} in

我想将
活动
类(
playlativity.java
)中的
整数
值传递给我的
服务
AudioService.java
)类。但是当我点击
列表项时,我的应用程序停止了。我想不出这个错误。希望有人能帮助我

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);
    }

当我注释
int currentSongIndex=intent.getExtras().getInt(“songIndex”)和`播放歌曲(当前歌曲索引);没有错误,但不执行任何操作。

BroadcastReceive对象仅在onReceive调用期间有效(上下文、意图)。一旦代码从此函数返回,系统将认为对象已完成且不再处于活动状态

这对onReceive(Context,Intent)实现中的操作有重要影响:任何需要异步操作的操作都不可用,因为您需要从函数返回来处理异步操作,但此时BroadcastReceiver不再处于活动状态,因此系统可以在异步操作完成之前终止其进程

简而言之,广播接收机的寿命很短,不能执行任何长时间运行的任务。在max,试着提出一个目标并在那里完成工作


这对您造成了崩溃,当您评论说它对您来说运行良好时。

当您面临问题时,有一种使用活动数据的最佳方法,即通过活动的共享首选项存储值,如下所示:

 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", "");
并从服务中获取它,如下所示:

 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", "");

这项技术可能会对您有所帮助。

您是否设置了
音频服务。在
action
中播放歌曲
tag in
intent filter
,您现在正在呼叫哪个?@dreamcoder,您的意思是什么。在
androidManifest
?如果您使用的是自定义
操作
,那么您必须在
receiver
@dreamcoder中定义它,我喜欢这个'IntentFilter IntentFilter=new IntentFilter();intentFilter.addAction(播放歌曲);registerReceiver(广播接收器、意向过滤器)`您可以编写一个静态方法,在该方法中,您可以执行您现在在onReceive()中所做的工作,并从onReceive()调用它。通常情况下,这些函数在Util类中以静态方法编写,您可以从任何地方调用该类。或者,您可以编写一个处理程序来执行该工作,并从onReceive()调用该处理程序。