3

Ich habe 2 Bildansichten in einem Fragment als anklickbar eingerichtet und ich versuche, einen Ton zu spielen, wenn jeder angeklickt wird! Ich kann das in einer Aktivität tun, aber nicht in einem Fragment! Ich versuche, zu Media Player zu verwenden, aber das wirft einen Fehler auf.einen Sound in onClick innerhalb eines Fragments mit Media Player oder Soundpool abspielen

public class HomeFragment extends Fragment { 


    public HomeFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     //giving me error cannot resolve method 
     final MediaPlayer mp = MediaPlayer.create(this, R.raw.music_marimba_chord); 

     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_home, container, false); 

     ImageView share = (ImageView)view.findViewById(R.id.share); 

     share.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
       sharingIntent.setType("text/plain"); 
       sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, ""); 
       sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, ""); 
       startActivity(Intent.createChooser(sharingIntent, "Share via")); 

     ImageView send = (ImageView)view.findViewById(R.id.send); 
     send.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("")); 
       startActivity(intent); 
      } 
     }); 



     return view; 
    } 

    // set fragment to portrait 
    @Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser); 
     if(isVisibleToUser) { 
      Activity a = getActivity(); 
      if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     } 
    } 


} 
+1

Veröffentlichen Sie Ihre Fehlerprotokolle. – user3765370

+0

Theres kein Fehlerprotokoll noch immer versucht, den Media Player zu implementieren, in dem Code, wo ich den Media Player und Raw-Datei verwiesen habe, gibt es mir einen Fehler der Methode kann nicht bei der Erstellung des Media Player-Objekts mit Raw-Datei –

+0

I don ' Ich denke, es sollte ein Problem geben. Es funktioniert für mich. Haben Sie Ihre Importe überprüft? – user3765370

Antwort

2

Wenn Sie SoundPool verwenden möchten, wird folgendes einen anderen Sound spielen, wenn klicken oder wählen Sie Ereignis auf dem Fragment ausgelöst:

public abstract class MainFragment extends Fragment { 

    private SoundPool soundPool; 
    private HashMap<Integer, Integer> soundPoolMap; 

    public void onCreate() { 
     initSounds(getActivity().getApplicationContext()); 
    } 

    public void initSounds(Context context) { 
     soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 100); 
     soundPoolMap = new HashMap(1); 
     soundPoolMap.put(R.raw.music1, soundPool.load(context, R.raw.music1, 1)); 
     soundPoolMap.put(R.raw.music2, soundPool.load(context, R.raw.music2, 1)); 
    } 

    public void playSound(int soundID) { 

     float volume = 0.2f; 

     // play sound with same right and left volume, with a priority of 1, 
     // zero repeats (i.e play once), and a playback rate of 1f 
     soundPool.play(soundPoolMap.get(soundID), volume, volume, 1, 0, 1f); 
    } 

    private void playSoundClick() { 
     playSound(R.raw.music1); 
    } 

    private void playSoundSelect() { 
     playSound(R.raw.music2); 
    } 

    public boolean onKey(View v, int keyCode, KeyEvent event) { 

     if (event.getAction() == KeyEvent.ACTION_UP) { 
      if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { 
       playSoundClick(); 
      } else { 
       playSoundSelect(); 
      } 
     } 
     return true; 
    } 
} 

Der Ton hier gespielt wird:

soundPool.play(soundPoolMap.get(soundID), volume, volume, 1, 0, 1f); 

Hier können Sie die Lautstärke links & richtig und Priorität setzen, falls Sie möchten, dass dieser Klang Vorrang vor anderen hat, wenn ein anderer in derselben 01 abgespielt wird

mit Ihrer Arbeit integrieren:

public class HomeFragment extends MainFragment { 


    public HomeFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_home, container, false); 

     super.onCreate(); 

     ImageView share = (ImageView)view.findViewById(R.id.share); 

     share.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       playSound(R.raw.music1); 

       Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
       sharingIntent.setType("text/plain"); 
       sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, ""); 
       sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, ""); 
       startActivity(Intent.createChooser(sharingIntent, "Share via")); 

     ImageView send = (ImageView)view.findViewById(R.id.send); 
     send.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       playSound(R.raw.music2); 

       Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("")); 
       startActivity(intent); 
      } 
     }); 

     return view; 
    } 
} 
+0

also, um diesen Sound zu spielen, wenn die 2 Bilderansichten angeklickt werden, müsste ich die Bildansichten in die playSoundClick-Methode hinzufügen, die Sie gepostet haben? Ich habe noch nie mit Soundpool gearbeitet, bevor ich –

+0

ah ich denke, ich bekomme es, also verwende ich diesen Code nicht im Homefragment! also erstelle ich dies als eine neue Java-Klasse mit dem Code, den du gepostet hast, und bearbeite dann meinen Home-Fragment-Code, den ich oben gepostet habe, um vom Hauptfragment zu erweitern? –

+1

ja, überprüfe mein Update über –