现在在做一个MP3的播放器
A界面是歌曲列表,B是播放界面
A跳转到B1(new 了一个新activity),然后给B1注册一个重力感应,返回A
再跳转到B2(重新new了一个activity),然后重力感应不起作用了,除了还在切歌,界面上的text都不变问题2:A跳转到B,然后给B1注册一个重力感应,退出程序再重新A-》B,然后重力感应不起作用了,除了还在切歌,界面上的text和进度条都不变我的想法会不会是重力感应绑定在B1上,所以B2不会变,而切歌其实还在B1那切的代码:
B界面:
public class MusicPlay extends Activity implements SensorEventListener{
private RelativeLayout broadcastView;
private ImageButton lastBut,nextBut,suspendBut;
private TextView musicNameText,nameText,barText;
private SeekBar bar;
private static MediaPlayer mediaPlayer;
private boolean suspendFlag = true;//判断当前歌曲是否暂停
private boolean order = true;//播放顺序
private String filePath;//歌曲地址
private int id;//歌曲id
private int length  = MusicList.path.size();//歌曲数量
private SensorManager mSensorMgr;
private long  curTime,lastTime,duration;
private float last_x = 0.0f; 
private float last_y = 0.0f; 
private float last_z = 0.0f;
private float shake = 0.0f; 
// private float totalShake = 0.0f; 
private boolean checkTime = true;
private int thisBg = 0;//当前图片的标记
private int lastBg = 0;//上一张图片的标记
private boolean seekBarFlag = true;
private boolean gravityFlag = true;
NotificationManager notificationManager;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.musicplay);
Log.e("ddd", String.valueOf((int)(Math.random()*length)));
Bundle bundle = this.getIntent().getBundleExtra("result");
        id = bundle.getInt("_id");
        Log.e("yy", String.valueOf(id));
filePath = MusicList.path.get(id).toString();
this.broadcastView = (RelativeLayout)findViewById(R.id.broadcastView);
this.musicNameText = (TextView)findViewById(R.id.musicNameText);
this.nameText = (TextView)findViewById(R.id.nameText);
this.bar = (SeekBar)findViewById(R.id.bar);
this.lastBut = (ImageButton)findViewById(R.id.lastOne);
this.nextBut = (ImageButton)findViewById(R.id.nextOne);
this.suspendBut = (ImageButton)findViewById(R.id.suspend);
this.bar = (SeekBar)findViewById(R.id.bar);
this.barText = (TextView)findViewById(R.id.barText);
this.suspendBut.setOnClickListener(new OnClickListenerImpl());
this.nextBut.setOnClickListener(new OnClickListenerImpl());
this.lastBut.setOnClickListener(new OnClickListenerImpl());
//置mediaPlayer为空闲状态
if(this.mediaPlayer!=null){
Log.e("返回再点", "到了这一步");
MusicPlay.this.mediaPlayer.stop();
MusicPlay.this.mediaPlayer.release();
MusicPlay.this.bar.setProgress(0);
}
//取得传感器管理对象
mSensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); 
//播放歌曲
this.musicBroadcast(filePath);
}

//实时更新进度条组件
private class UpdateSeekBar extends AsyncTask<Integer, Integer, String>{ @Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
} @Override
protected void onProgressUpdate(Integer... values) {
MusicPlay.this.bar.setProgress(values[0]);
} @Override
protected String doInBackground(Integer... params) {
while(seekBarFlag){
try{
Thread.sleep(params[0]);
}catch(Exception e){
}
this.publishProgress(MusicPlay.this.mediaPlayer.getCurrentPosition());
}
return null;
}
}
//根据str路径寻找歌曲播放
public void musicBroadcast(String str){
try {
MusicPlay.this.seekBarFlag = true;
this.bar.setProgress(0);
//显示 歌名,歌手名
Log.e("返回再点",str);
Log.e("返回再点", MusicList.find("_filePath", str, "_musicName"));
MusicPlay.this.musicNameText.setText(MusicList.find("_filePath", str, "_musicName"));

this.nameText.setText(MusicList.find("_filePath", str, "_name"));
//初始化mediaPlayer
this.mediaPlayer= new MediaPlayer();
//把歌曲路径置入mediaPlayer之中
this.mediaPlayer.setDataSource(str);
//mediaPlayer组件准备
this.mediaPlayer.prepare(); //mediaPlayer播放
this.mediaPlayer.start();
//以歌曲时间为长度初始化进度条
this.bar.setMax(MusicPlay.this.mediaPlayer.getDuration());
UpdateSeekBar seekBar = new UpdateSeekBar();
seekBar.execute(1000);
//对进度条加入监听,实时更新
this.bar.setOnSeekBarChangeListener(new setOnSeekBarChangeListenerImpl());
//设置监听,当播放完毕,自动切歌
this.mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Log.e("yw","切歌");
MusicPlay.this.checkMusic("next");
}
});
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

//拖动进度条时触发此监听
private class setOnSeekBarChangeListenerImpl implements OnSeekBarChangeListener{ @Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
int x = progress/1000;
int min = x/60;
int second = x%60;
MusicPlay.this.barText.setText(min+":"+second);
} @Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override
//拖动进度条停下的时候,歌曲跳转到对应的时间
public void onStopTrackingTouch(SeekBar seekBar) {
MusicPlay.this.mediaPlayer.seekTo(seekBar.getProgress());
}

}

//开始,暂停,前一首,后一首的按钮监听
private class OnClickListenerImpl implements OnClickListener{
          //略
}

//创建菜单
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
         //略
    }
//菜单的操作监听
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
      //得到被点击的item的itemId
        switch(item.getItemId()){
        case R.id.sequences: 
         MusicPlay.this.order = true;
            break;
        case R.id.random:
         MusicPlay.this.order = false;
            break;
        case R.id.gravity:
         if(gravityFlag){
         //注册SensorEventListener
         mSensorMgr.registerListener(this, mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME); 
         gravityFlag =false;
         Toast.makeText(this, "已开启摇摇换歌", Toast.LENGTH_LONG).show();
         }else{
         mSensorMgr.unregisterListener(this, mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER));
         gravityFlag =true;
         Toast.makeText(this, "已关闭摇摇换歌", Toast.LENGTH_LONG).show();
         }
         break;
        }
        return true;
    }
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {

}
//传感度数据的监测
@Override
public void onSensorChanged(SensorEvent e) {
// float bx = 0; 
// float by = 0; 
// float bz = 0; 
// long btime = 0;
float x = e.values[SensorManager.DATA_X]; 
float y = e.values[SensorManager.DATA_Y]; 
float z = e.values[SensorManager.DATA_Z]; 

// float speadX = (x - bx) / (System.currentTimeMillis() - btime); 
// //y轴的速度 
// float speadY = (y - by) / (System.currentTimeMillis() - btime); 
// //z轴的速度
// float speadZ = (z - bz) / (System.currentTimeMillis() - btime); 
// bx = x; 
// by = y; 
// bz = z; 

//获取当前时刻的毫秒数
curTime = System.currentTimeMillis();   
//100毫秒检测一次 
if ((curTime - lastTime) > 100) {  
// totalShake = 0;
duration = (curTime - lastTime);   
// // 看是不是刚开始晃动 
// if (last_x == 0.0f && last_y == 0.0f && last_z == 0.0f) { 
// //last_x、last_y、last_z同时为0时,表示刚刚开始记录 
// initTime = System.currentTimeMillis(); 
// } else { 
// 单次晃动幅度 
shake = (Math.abs(x - last_x) + Math.abs(y - last_y) + Math.abs(z - last_z)) / duration * 100; 
// }   

//把每次的晃动幅度相加,得到总体晃动幅度 
// totalShake += shake; 


//如果晃动幅度大于35,则切歌
if(shake > 35 ){
if(MusicPlay.this.checkTime){

//延时1s,1s内只能切一次歌
new Thread(new sleep()).start();
MusicPlay.this.checkMusic("next");
MusicPlay.this.checkBackground();
}
}
//把当前的参数赋值给lastXXX值,用于下次比较
last_x = x; 
last_y = y; 
last_z = z; 
lastTime = curTime;
}
}
//切歌时候的主方法
private  void checkMusic(String str){
//先停止当前歌曲的播放
MusicPlay.this.mediaPlayer.stop();
MusicPlay.this.mediaPlayer.release();
MusicPlay.this.suspendBut.setBackgroundResource(R.drawable.pic_suspend);
MusicPlay.this.suspendFlag = true;
//把进度条置零
MusicPlay.this.bar.setProgress(0);
//判断是否为顺序播放
if(order){
if(str.equals("next")){
if(id == length-1){
MusicPlay.this.musicBroadcast(MusicList.path.get(0).toString());
MusicPlay.this.id = 0;
}else{
MusicPlay.this.musicBroadcast(MusicList.path.get(id+1).toString());
MusicPlay.this.id = id+1;
}

}else if(str.equals("last")){
if(id==0){
MusicPlay.this.musicBroadcast(MusicList.path.get(length-1).toString());
MusicPlay.this.id = length-1;
}else{
MusicPlay.this.musicBroadcast(MusicList.path.get(id-1).toString());
MusicPlay.this.id = id-1;
}
}
}else{
int x = (int)(Math.random()*length);
MusicPlay.this.musicBroadcast(MusicList.path.get(x).toString());
MusicPlay.this.id = x;
}
}
//延时1s
private class sleep implements Runnable{ @Override
public void run() {
try {
MusicPlay.this.checkTime = false;
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
MusicPlay.this.checkTime = true;
}
}
//切换背景图
private void checkBackground(){
// Log.e("切图片", "切切切");
thisBg = (int)(Math.random()*5);
while(thisBg==lastBg){
thisBg = (int)(Math.random()*5);
}
String str="pic_bg"+String.valueOf(thisBg);
String type="drawable";
Log.e("切图片", str);
int Rid=getResources().getIdentifier(str,type,getPackageName());
MusicPlay.this.broadcastView.setBackgroundResource(Rid);
lastBg = thisBg;
}
  public boolean onKeyDown(int keyCode, KeyEvent event) {   
  if (event.getRepeatCount() != 0){
  return false; 
  }
  switch (keyCode) {
   case KeyEvent.KEYCODE_BACK:
   MusicPlay.this.suspendFlag = false;
MusicPlay.this.suspendBut.setBackgroundResource(R.drawable.pic_play);
   Intent intent = new Intent(MusicPlay.this,
MainActivity.class);
startActivity(intent);
MusicPlay.this.seekBarFlag = false;
// notificationManager.cancelAll();
finish();
  
   break;
   default:
   break;
  }  
  return false;    
  } }