2011-06-07 54 views
0

我试图通过调整器播放音乐,并且我已经完成了它。每当我在旋转器上选择项目时,都应该播放选定的曲调。这工作正常......但我在下面的代码中有一个很大的例外。即,当选择的项目的一个乐曲正在播放时,并且如果我选择另一个同时也在用第一乐曲播放的项目时。我怎么能解决这个问题?任何想法?Android:在调整器中重叠在另一个调谐上的一个调子

帮助总是赞赏....!

这是我的代码...

import java.util.concurrent.Callable; 
import android.app.Activity; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.RelativeLayout; 
import android.widget.Spinner; 

public class SettingsActivity extends Activity { 
    //FrameLayout maininclude; 
    RelativeLayout settingspage; 
    RelativeLayout loginpage; 
    RelativeLayout registerpage; 
    RelativeLayout forgotpasswordpage; 
    MediaPlayer mp; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.settingspage); 
     final Button login = (Button) findViewById(R.id.setloginbutton); 
     final Button register = (Button) findViewById(R.id.setregisterbutton); 
     final Button forgotpassword1 = (Button) findViewById(R.id.setforgotpasswordbutton); 
     final Spinner tunes = (Spinner) findViewById(R.id.tunesspinner); 
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
       this, R.array.tunes, R.layout.spinnerlayout); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     tunes.setAdapter(adapter); 
     tunes.setOnItemSelectedListener(new OnItemSelectedListener() 
     { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long i) { 
       if(position == 0) { 
        //First Entry 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.dumy); 
        mp.start(); 
       } 
       if(position == 1) { 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.akko_echo); 
        mp.start(); 

       } 
       if(position == 2) { 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.crystal_cling); 
        mp.start(); 

       } 
       if(position == 3) { 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.glocken_jing); 
        reset(); 
        mp.start(); 
       } 
       if(position == 4) { 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.bang_drum); 
        reset(); 
        mp.start(); 
       } 
       if(position == 5) { 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.grand_piano); 
        reset(); 
        mp.start(); 
       } 
       if(position == 6) { 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.hard_rock); 
        reset(); 
        mp.start(); 
       } 
       if(position == 7) { 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.sonic_bloom); 
        mp.start(); 
       } 
       if(position == 8) { 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.bass_boost); 
        reset(); 
        mp.start(); 
       } 
       if(position == 9) { 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.spooky_freaky); 
        reset(); 
        mp.start(); 
       } 
       if(position == 10) { 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.akko_echo); 
        reset(); 
        mp.start(); 
       } 
       if(position == 11) { 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.shan_zung); 
        reset(); 
        mp.start(); 
       } 
       if(position == 12) { 
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.yo_drum); 
        reset(); 
        mp.start(); 
       } 
      } 
      private void reset() { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
      } 
     }); 
//maininclude = (FrameLayout) findViewById(R.id.mainlayout); 
     //settingspage = (RelativeLayout) findViewById(R.id.settingsxml); 
     // loginpage = (RelativeLayout) findViewById(R.id.loginxml); 
     //registerpage = (RelativeLayout) findViewById(R.id.registrationxml); 
     //forgotpasswordpage = (RelativeLayout) findViewById(R.id.forgotpasswordxml); 
     login.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View view) { 
       // TODO Auto-generated method stub 
       Intent myIntent = new Intent(view.getContext(), 
         LoginActivity.class); 
       startActivityForResult(myIntent, 0); 
       overridePendingTransition(R.anim.fadein, 0); 
       // settingspage.setVisibility(View.GONE); 
       //registerpage.setVisibility(View.GONE); 
       //forgotpasswordpage.setVisibility(View.GONE); 
       //loginpage.setVisibility(View.VISIBLE); 
      } 
     }); 
     register.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       // TODO Auto-generated method stub 
       Intent myIntent = new Intent(view.getContext(), 
         RegisterActivity.class); 
       startActivityForResult(myIntent, 1); 
       overridePendingTransition(R.anim.fadein, 0); 
      } 
     }); 
     forgotpassword1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       // TODO Auto-generated method stub 
       Intent myIntent = new Intent(view.getContext(), 
         ForgotPasswordActivity.class); 
       startActivityForResult(myIntent, 2); 
       overridePendingTransition(R.anim.fadein, 0); 
      } 
     }); 
    } 
} 

回答

1

在代码顶部创建一个MediaPlayer对象(也许是一个成员变量)。在开始你的单个mp对象之前,检查它是否为空。
编辑 - 首先调用stop(),然后调用release(),然后将新的MediaPlayer对象分配给您的成员变量。
哦,另外,确保你的成员变量在方法之外,所以它在方法调用之间持续存在。
如果这不起作用,请告诉我。
编辑2: 我认为,尽管您在顶部定义了媒体播放器,但您仍然使用影响成员变量的局部变量,使其无用。我为你建立了一个工作例子。完全按照它,它会为你工作。

package com.example.sounds; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 

public class SoundActivity extends Activity { 

    MediaPlayer mp; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     final Spinner tunes = (Spinner) findViewById(R.id.spinner1); 

     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.sounds_array, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     tunes.setAdapter(adapter); 

     tunes.setOnItemSelectedListener(new OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long i) { 

       if (mp != null){ 
        mp.stop(); 
        mp.release(); 
       } 

       switch (position) { 
        case 0: 
         mp = MediaPlayer.create(getBaseContext(), R.raw.sound_click); 
         mp.start(); 
         break; 
        case 1: 
         mp = MediaPlayer.create(getBaseContext(), R.raw.sound_lotus); 
         mp.start(); 
         break; 
        case 2: 
         mp = MediaPlayer.create(getBaseContext(), R.raw.sound_tear); 
         mp.start(); 
         break; 
       } 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 

       if (mp != null){ 
        mp.stop(); 
        mp.release(); 
       } 
      } 
     }); 
    } 

} 
+0

@CaspNZ ...我用release()完成了它;但仍然可以继续,你可以编辑这个,给我... – 2011-06-07 09:33:52

+0

编辑 - 见上文。 – 2011-06-07 09:54:14

+0

@CaspNZ plz查看我的上面的完整代码,并告诉我我错在哪里... – 2011-06-07 14:05:24

0

你为什么不检查,看看是否MP已经被实例化和reset()release()再次创建它之前?