2017-12-18 52 views
0

사운드 보드를 만들려고하는데 처음으로 작업 표시 줄에서 작업 한 이래로 붙어 있습니다.
그래서 메뉴를 만들었고 버튼이 작업 표시 줄에 표시되고 원하는 작업에 표시되지만 소리 풀에서 모든 소리를 중지 할 때 눌렀을 때 어떻게 만들지는 모릅니다.
SoundPool.stop()을 만들 때 "정적이 아닌 메서드 'stop (int)'을 정적 컨텍스트에서 참조 할 수 없습니다."(아마 잘못된 것이지만 그것을 수행하는 방법을 모릅니다.) 정말로 감사하겠습니다. 그것은 누군가가 그것에 대해 배우려고 노력 봤는데 내가 가까이 아무것도 찾을 수가 질수 있기 때문에 도움이 될 수 있다면 여기 작업 표시 줄에서 사운드 풀의 사운드를 멈추는 방법

코드입니다 :.

: 여기
import android.media.AudioManager; 
    import android.media.SoundPool; 
    import android.os.Bundle; 
    import android.support.v7.app.AppCompatActivity; 
    import android.view.Menu; 
    import android.view.View; 



    public class soundMainjava extends AppCompatActivity { 

    SoundPool mySound; 
    int sound1Id; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.soundMain); 
     setVolumeControlStream(AudioManager.STREAM_MUSIC); 
     mySound = new SoundPool(99, AudioManager.STREAM_MUSIC, 0); 
     sound1Id = mySound.load(this, R.raw.sound1, 1); 
    } 

    public void pb1(View view) { 
     mySound.play(sound1Id, 1, 1, 1, 0, 1); 
    } 

    //inflates the menu; 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu, menu); 
     return true; 
    } 
} 

메뉴 코드
<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
tools:context="com.example.---.testsounds.soundMainjava"> 
<item 
    android:id="@+id/action_sound" 
    android:icon="@drawable/ic_volume_off_black_24dp" 
    android:title="" 
    app:showAsAction="always"/> 
</menu> 

여기에 코드가 있습니다. 작동하지 않습니다에 :

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_sound: 
      SoundPool.stop(sound1Id); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
+1

질문에 오류 설명을 추가하십시오. – svgrafov

+0

오케이 완료되었습니다. –

답변

0

그래서 문제가 :

 public class SoundPlayer { 

    private static final float leftVol = 1.0f; 
    private static final float rightVol = 1.0f; 
    private static final float rate = 1.0f; 
    private static final int loop = 0; 
    private static final int priority = 1; 
    private static SoundPool soundPool; 

    private static int startListeningSound; 
    private static int stopListeningSound; 

     public SoundPlayer(Context context) { 
     soundPool = new SoundPool.Builder().setMaxStreams(2).build(); 

     startListeningSound = soundPool.load(context, R.raw.google_now_tone, priority); 
     stopListeningSound = soundPool.load(context, R.raw.google_glass_done, priority); 

} 
     public void playStartVoiceSound() { 
     soundPool.play(startListeningSound, leftVol, rightVol, priority, loop, rate); 
    } 

     public void playStopVoiceSound() { 
     soundPool.play(stopListeningSound, leftVol, rightVol, priority, loop, rate); 
    } 

:

switch (item.getItemId()) { 
     case R.id.action_sound: 
// You are calling the static method. 
      SoundPool.stop(sound1Id); 
// You have to call the object created from SoundPool Class 
      return true;` 

그래서이

여기
switch (item.getItemId()) { 
     case R.id.action_sound: 
      mySound.stop(sound1Id); 
      return true; 

가 완벽하게 작동 샘플입니다해야한다 그리고 당신의 활동에 전화 할 때 :

private SoundPlayer soundPlayer; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    ... 
     soundPlayer = new SoundPlayer(this); 
    ... 
    // calling soundPlayer to play the sound : 
    int streamId = soundPlayer.playStartVoiceSound(); 


    // calling the soundPlayer stop 

    soundPlayer.stop(streamId); 
    }