Để đọc file
nhạc mp3, ta sẽ làm một ứng dụng nhỏ vui vui. Đó là ứng dụng giả tiếng ngáy, trẻ
em rất thích ứng dụng kiểu này.
Tạo một
project có tên bất kỳ, copy hai dòng sau
thêm vào khai báo class Main trong AndroidManifest.xml.
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Ta để màn
hình full kín, để chiều màn hình là dọc.
Tạo thư mục
drawable dưới res, copy các icon vào đó. Tạo thêm một thư mục tên raw, để 3
file âm thanh mp3 là một đoạn tiếng ngáy. Bạn có thể vào trang http://www.freesound.org/
để tải đủ thứ tiếng động miễn phí về.
Trong file
activity_main tạo một Scroll layout cuộn được, gồm có một ảnh trang trí, một ảnh
chữ tiêu đề và ba hàng nút bấm.
<?xml version="1.0"
encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:fillViewport="true" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:gravity="center_horizontal"
android:orientation="vertical"
>
<ImageView
android:id="@+id/imgPicture2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:src="@drawable/nn" />
<ImageView
android:id="@+id/imgPicturem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:src="@drawable/cb" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
>
<TextView
android:id="@+id/t0"
android:layout_width="100dp"
android:layout_height="50dp"
android:background="@drawable/bb"
android:clickable="true"
android:gravity="center"
android:onClick="onClick"
android:text="SNORE"
android:textColor="#0000cd"
android:textSize="26sp"
/>
<TextView
android:id="@+id/t"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_marginLeft="50dp"
android:background="@drawable/bc"
android:clickable="true"
android:gravity="center"
android:onClick="onClick2"
android:text="PAUSE"
android:textColor="#c90016"
android:textSize="26sp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
>
<TextView
android:layout_width="100dp"
android:layout_height="50dp"
android:background="@drawable/bb"
android:clickable="true"
android:gravity="center"
android:onClick="onClick3"
android:text="SNORE"
android:textColor="#0000cd"
android:textSize="26sp"
/>
<TextView
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_marginLeft="50dp"
android:background="@drawable/bc"
android:clickable="true"
android:gravity="center"
android:onClick="onClick4"
android:text="PAUSE"
android:textColor="#c90016"
android:textSize="26sp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
>
<TextView
android:layout_width="100dp"
android:layout_height="50dp"
android:background="@drawable/bb"
android:clickable="true"
android:gravity="center"
android:onClick="onClick5"
android:text="SNORE"
android:textColor="#0000cd"
android:textSize="26sp"
/>
<TextView
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_marginLeft="50dp"
android:background="@drawable/bc"
android:clickable="true"
android:gravity="center"
android:onClick="onClick6"
android:text="PAUSE"
android:textColor="#c90016"
android:textSize="26sp"
/>
</LinearLayout>
</LinearLayout>
</ScrollView>
Đảm bảo các
icon của bạn đúng tên, chạy thử sẽ ra màn hình như sau.
Bây giờ quay
vào class Main, ta không dùng nút bấm mà dùng textView rồi set nó click được, rồi
dùng hàm onClick để điều khiển.
Dùng kiểu này
có lợi là không cần khai báo textView trong code nữa, chỉ có mỗi hàm click
thôi.
Khai báo ba
biến đếm cho nút Snore và 3 biến dùng để điều khiển nút Pause, cùng 3 biến để
play nhạc.
int dem=0;
int dem2=0;
int dem3=0;
int po=0;
int po2=0;
int po3=0;
MediaPlayer mp = new MediaPlayer();
MediaPlayer mp2 = new MediaPlayer();
MediaPlayer mp3
= new MediaPlayer();
Nhập các thư
viện cần dùng vào.
Ở đây chú ý
là ta có thể khởi tạo các biến dưới dòng setContentView. Tuy nhiên khi đang
phát lại stop hay pause thì lúc bật lại nó hay bị tịt, không chơi lại được nữa.
Giải pháp là
ta khởi tạo trong nút Snore để đảm bảo nó sẽ play lại sau khi stop.
Hàm điều khiển
nút Snore đầu tiên, copy lên trên ngoặc đóng cuối cùng.
public void onClick(View v)
{
dem=1;
mp = MediaPlayer.create(this, R.raw.ab);
mp.setLooping(true);
mp.start();
po=0;
if(mp2 != null||mp3 != null) {
mp2.pause();
mp3.pause();
}
}
Ta tạo biến đếm
để biết là đang play, sẽ dùng nó bên nút Pause, bật nhạc và set để po=0 tức
không phải đang chờ. Ta để các file lặp lại luôn tức chỉ cần file nhạc 5-7 giây
nhưng ta lặp lại là thành tiếng ngáy dài.
Đồng thời để
cùng lúc không có hơn 1 file nhạc phát thì ta stop hoặc pause tất cả các file khác.
Bây giờ sang
nút Pause đầu tiên.
public void onClick2(View
v) {
po=po+1;
if(dem==1){
if(po%2==0){
mp.start();
}
else{
mp.pause();
}
}
}
Ta cộng po
lên rồi chia chẵn lẻ để nếu người dùng ấn một lần thì dừng, hai lần lại bật, cứ
như vậy.
Dùng biến đếm
bên nút Snore =1 tức là nếu đang phát thì mới Pause.
Các nút sau
tương tự.
public void onClick3(View
v) {
dem2=1;
mp2 = MediaPlayer.create(this, R.raw.ac);
mp2.setLooping(true);
mp2.start();
po2=0;
if(mp != null||mp3 != null) {
mp.pause();
mp3.pause();
}
}
public void onClick4(View
v) {
po2=po2+1;
if(dem2==1){
if(po2%2==0){
mp2.start();
}
else{
mp2.pause();
}
}
}
public void onClick5(View
v) {
dem3=1;
mp3 = MediaPlayer.create(this, R.raw.a);
mp3.setLooping(true);
mp3.start();
po3=0;
if(mp != null||mp2 != null) {
mp.pause();
mp2.pause();
}
}
public void onClick6(View
v) {
po3=po3+1;
if(dem3==1){
if(po3%2==0){
mp3.start();
}
else{
mp3.pause();
}
}
}
Copy các dòng
sau xuống trên ngoặc đóng cuối cùng.
@Override
public void onDestroy() {
// TODO
Auto-generated method stub
super.onDestroy();
if(mp != null||mp2 != null||mp3 != null) {
mp.stop();
mp2.stop();
mp3.stop();
finish();
}
}
Các dòng này
để khi đang chạy mà người dùng thoát app thì âm thanh cũng dừng lại.
Chạy thử để
thấy ứng dụng đã hoạt động, ấn các nút để kiểm tra, đang chạy nút này lại ấn
nút kia xem có phát bình thường không.
No comments:
Post a Comment