나는이 모든 것을 배울 수 있도록이 앱을 작성하기 시작했습니다.안드로이드 조각에서 소리가 onClick 이벤트 후 재생되지 않습니다
이 앱은 클릭 할 때 이미지가 소리를내는 일련의 '스 와이프 할 수있는'화면으로 구성된 보조 활동으로 이어지는 클릭 가능한 이미지 6 개로 시작됩니다.
SecondaryPage.java
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
public class SecondaryPage extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the content of the activity to use the activity_main.xml layout file
setContentView(R.layout.secondary);
// Find the view pager that will allow the user to swipe between fragments
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
// Create an adapter that knows which fragment should be shown on each page
SimpleFragmentPagerAdapter adapter = new SimpleFragmentPagerAdapter(getSupportFragmentManager());
// Set the adapter onto the view pager
viewPager.setAdapter(adapter);
}
}
SimpleFragmentAdapter.java
AnimalsFragement.java (Croc()
및 Camel()
를 제외한 동일하다 : 여기서 생성 화면에 필요한 보조 및 조각 코드의 코드는 이름)
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;
import static com.example.testfrags.R.layout.animals;
public class AnimalsFragment extends Fragment {
private ImageView imageView;
private MediaPlayer mp;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = null;
//Inflating View to access it's resources
v = inflater.inflate(animals, container, false);
Log.i("AnimalsFragment", "mp before playing: " + mp);
//creating clickable image
imageView = (ImageView) v.findViewById(R.id.jungle_animals);
// Sound played once clicked
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Start playback.
mp = MediaPlayer.create(getActivity(), R.raw.lioncub2);
Log.i("AnimalsFragment", "mp: " + mp);
mp.start();
mp.stop();//Stops playback - added precaution
// release media resources
releaseMediaPlayer();
Log.i("AnimalsFragment", "mp after release: " + mp);
// Little msg confirm end of sound
Toast.makeText(v.getContext(), "Questo era il Leoncino", Toast.LENGTH_SHORT).show();
}
});
return v;
} // end of onCreatView
/**
* Clean up the media player by releasing its resources.
*/
private void releaseMediaPlayer() {
// If the media player is not null, then it may be currently playing a sound.
if (mp != null) {
// Regardless of the current state of the media player, release its resources
// because we no longer need it.
mp.reset();
mp.release();
// Set the media player back to null.
} // end of if
} // end of releaseMediaPlayer
@Override
public void onStop() {
super.onStop(); // Always call the superclass method first
releaseMediaPlayer();
}
}
다음은 xml 파일입니다. 초
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
animals.xml ondary.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:id="@+id/jungle_animals"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/lion"/>
</LinearLayout>
응용의 컴파일 및 실행은 (croc.xml 및 camel.xml은 동일)하지만 난 어떤 조각에 모든 이미지를 클릭하면 소리가 없다 연주. 내 장치에서 에뮬레이션을 시도했지만 아무것도하지 않았습니다.
내가 잘못 했습니까? 내가 라인에 v.getContext()
와 getActivity()
을 변경 시도
:
`mp = MediaPlayer.create(getActivity(), R.raw.lioncub2);`
하지만 아무것도 변경되지 않습니다. 모든 사운드 파일은 mp3입니다. 나는 또한 세 개의 이미지가있는 조각이없는 secondaryPage.java 버전을 작성하여 mp3 파일이 정상적으로 재생되는지 확인할 수 있습니다. 또한 onClick()
메서드가 작동하는지 확인하기 위해 Toast
메시지를 삽입했습니다. 디버그하고 mp = MediaPlayer.create(getActivity(), R.raw.lioncub2);
행으로 들어가서 계속하면 사운드가 재생됩니다. 사전에 어떤 도움
10-15 10:50:36.962 2459-2459/com.example.testfrags I/Croc: mp before playing: null
10-15 10:50:37.682 2459-2459/com.example.testfrags I/Choreographer: Skipped 36 frames! The application may be doing too much work on its main thread.
10-15 10:50:39.472 2459-2459/com.example.testfrags I/AnimalsFragment: mp: [email protected]
10-15 10:50:39.482 2459-2459/com.example.testfrags I/AnimalsFragment: mp after release: null
감사 :
다음은 Log.i 문의 출력입니다!
대단히 감사합니다. stop 메소드를 삭제했지만 아무 것도 변경되지 않았습니다. 이전에 MediaPlayer (아무 조각 코딩도) 파일을 재생산하는데 문제가 없었으므로 지금 왜 작동하지 않는지 알 수 없습니다. – BletchleyP
내가 먼저 듣고 싶은 대답은 짧거나 길습니까? –
그것은 당신에게 아주 친절합니다. 오디오 파일은 mp3 파일의 동물 소리이므로 너무 길지 않습니다. – BletchleyP