在Android上播放声音

时间:2014-05-15 19:37:18

标签: android audio

package gal.doron.ballinthehole;

import android.media.MediaPlayer;

public class Bricks 
{
    Brick[][] bricks;
    public Bricks(int rows, int cols, float brickW, float brickH)
    {
        bricks = new Brick[rows][cols];
        float x=0,y=0;
        for(int i=0;i<rows;i++,y+=brickH)
        {
            x=0;
            for(int j=0;j<cols;j++,x+=brickW)
            {
                bricks[i][j] = new Brick(x, y, brickW, brickH, 1);
            }
        }
    }

    public boolean isHitAll()
    {
        for(int i=0;i<rows();i++)
        {
            for(int j=0;j<cols();j++)
            {
                if(bricks[i][j].getType()!=0 && bricks[i][j].getType()!=4)
                    return false;
            }
        }
        MediaPlayer mp = MediaPlayer.create(this, R.raw.hopa);
        mp.start();
        return true;
    }
}

各位大家好,当你调用'isHitAll()'的函数为真时(当所有的砖被击中时),你能帮我发声(在我的情况下是声音cal“hopa”)吗?

这是我的尝试..我在这一行得到错误“MediaPlayer mp = MediaPlayer.create(this,R.raw.hopa);”
“MediaPlayer类型中的方法crate(Context,int)不适用于参数(Brick,int)”。

抱歉我的英文,谢谢!

2 个答案:

答案 0 :(得分:1)

您收到错误The method crate(Context, int) in the type MediaPlayer is not applicable for the arguments (Brick,int)。因为您无法传递&#34; Brick&#34;类型的对象需要Context的地方。由于Brick不是也不会扩展或实施活动,因此无法引用当前的Activity Context

可能的解决方案是在Context课程中添加Brick字段,然后使用Getter / Setter设置Context字段您的MainActivity&#39; OnCreate。然后,您想要使用Context字段构建MediaPlayer。

示例:

package gal.doron.ballinthehole;

import android.media.MediaPlayer;
Context context;
public class Bricks 

{
    Brick[][] bricks;
    public Bricks(int rows, int cols, float brickW, float brickH)
    {
    bricks = new Brick[rows][cols];
    float x=0,y=0;
    for(int i=0;i<rows;i++,y+=brickH)
    {
        x=0;
        for(int j=0;j<cols;j++,x+=brickW)
        {
            bricks[i][j] = new Brick(x, y, brickW, brickH, 1);
        }
    }
}

public boolean isHitAll()
{
    for(int i=0;i<rows();i++)
    {
        for(int j=0;j<cols();j++)
        {
            if(bricks[i][j].getType()!=0 && bricks[i][j].getType()!=4)
                return false;
        }
    }
    MediaPlayer mp = MediaPlayer.create(context, R.raw.hopa);
    mp.start();
    return true;
}

 public void setContext(Context context){
 this.context = context;
}
public Context getContext(Context context){
  return this.context;
}

}

MainActivity

  protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Brick.setContext(getContext());
}

答案 1 :(得分:0)

MediaPlayer需要一个Activity的上下文才能被创建。创建一个扩展Application的类并将应用程序上下文存储在公共静态变量中是有帮助的。您也可以将活动的上下文传递给&#39; Bricks&#39;像这样的类构造函数:

编辑,因为您没有从某个活动中调用此类,您应该尝试创建一个名为MyApplication的新类,并按如下方式声明:

public class MyApplication extends Application {

    public static Context context;

    onCreate() {
        super.onCreate();


        context = getApplicationContext();

    }

}

编辑:然后在Bricks中,在创建MediaPlayer时使用“应用程序”上下文。

  public class Bricks 
  {

  MediaPlayer mp;

  Brick[][] bricks;
  public Bricks(int rows, int cols, float brickW, float brickH)
  {

      mp = MediaPlayer.create(MyApplication.context, R.raw.hopa);
      bricks = new Brick[rows][cols];
      float x=0,y=0;
      for(int i=0;i<rows;i++,y+=brickH)
      {
          x=0;
          for(int j=0;j<cols;j++,x+=brickW)
          {
              bricks[i][j] = new Brick(x, y, brickW, brickH, 1);
          }
      }
  }

  public boolean isHitAll()
  {
      for(int i=0;i<rows();i++)
      {
          for(int j=0;j<cols();j++)
          {
              if(bricks[i][j].getType()!=0 && bricks[i][j].getType()!=4)
                  return false;
          }
      }

      mp.start();
      return true;
  }
}

希望这有帮助!