TUAN DC

[Android căn bản] Bài 10: Service trong Android-Phần 2 Unbound Service trong Android.



Ở phần trước tôi đã giới thiệu với các bạn về các loại service trong Android rồi hôm nay tôi sẽ giới thiệu với các bạn cách sử dụng Unbound service trong Android

Chào các bạn chúng ta lại gặp nhau trong Series Android truyền kì rồi. Ở phần trước tôi đã giới thiệu với các bạn về các loại service trong Android rồi hôm nay tôi sẽ giới thiệu với các bạn cách sử dụng Unbound service như các bạn đã biết đây là loại service không ràng buộc nó có thể chạy ngau cả khi thành phần khởi chạy nó bị hủy.

Unbound service.

Trong ví dụ lần này tôi sẽ làm một cái phần mềm nghe nhạc nho nhỏ thôi 😀

Đầu tiên ta chuẩn bị nguyên liệu để xào nấu nào.

Tạo thư mục android resource

Tạo thư mục android resource

Đầu tiên nhấn chuột phải vào res chọn New và chọn Android resource directory.

Chọn Resource type là raw và nhấn OK

Chọn Resource type là raw và nhấn OK

Đây là thư mục sẽ chứa các tập tin muilti media như video, nhac…. và trong ví dụ này mình chỉ chơi nhạc từ file được bỏ sẵn vào trong ứng dụng còn muốn đọc từ thẻ nhớ hay bộ nhớ máy ta sẽ làm cách khác nhưng đây là ví dụ mà. 😀

Chép tập tin vào thư mục raw

Chép tập tin vào thư mục raw

À có một lưu ý nhỏ là các tập tin trong thư mục resource của Android sẽ được viết thường và không được có chứ kí tự đặc biệt kể cả dấu cách.

File main_activity.xml
giao diện

giao diện

Ở đây tôi chỉ làm cái giao diện đơn giản gồm hai nút play và stop

code:
<?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" >
    <Button
        android:id="@+id/play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Play"/>
    <Button
        android:id="@+id/stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Stop"/>


</LinearLayout>

Sau đó ta sẽ tạo một file Java khác có tên là MusicService, đây chính là service của chúng ta.

Code:
package com.tuandc.akinosora.unboundservice;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.support.annotation.Nullable;

/**
 * Created by Akinosora on 07/10/2017.
 */

public class MusicService extends Service{ // Kế thừa lớp Service và implement những phương thức cần có của lớp
    String tag = "MusicService";
    MediaPlayer mp;
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        // Đôi với Unbound Service thì hàm này không cần quan tâm.

        return null;
    }
// Override phương thức onCreate
    @Override
    public void onCreate() {
        super.onCreate();
        mp = MediaPlayer.create(getApplicationContext(), R.raw.shigatsuwakiminouso);// Khởi tạo trình chơi nhạc mặc định của Android với hai đối số là Context và id của bài hát được đặt trong thư mục raw
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //Override lai phuowng thuc onStartCommand  tại đây bạn sẽ viết các sử lý cho tác vị của mình.
       mp.start();// Bắt đầu chơi nhạc
        return  START_STICKY;// Trả lại giá trị xem OS có kill seervice hay không nếu nó kill thì service sẽ tự chạy lại còn Intent gọi nó thì sẽ không được chạy lại.
    }

    @Override
    public void onDestroy() {
        // Override onDestroy tại đây bạn sẽ viết xử lý khi tiến trình bị hủy
        super.onDestroy();
        mp.release();// Dừng chơi nhạc
    }
}

Và tại File MainActivity.java chúng ta sẽ khi như sau.

package com.tuandc.akinosora.unboundservice;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private Button play, stop;

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

        initEvent();
    }

    private void initEvent() {
      Intent playMusic = new Intent(MainActivity.this, MusicService.class);
                /*Tạo một cái Intent có đối số là activity hiện tại và cái service mà ta vửa tạo
                Mà đợi đã có gì đó sai sai đang sử dụng Service mà lại khởi tạo Intent làm chi
                Chẳng phải Intent để chuyển đổi qua lại giữa các màn hình thôi sao xin thưa là không
                Intent có thể làm rất nhiều trò chứ không phải chỉ có mỗi trò chuyển đổi giữa các Activity và đây
                là một trong số những trò đó, trò gọi service
                */
        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent playMusic = new Intent(MainActivity.this, MusicService.class);
                /*Tạo một cái Intent có đối số là activity hiện tại và cái service mà ta vửa tạo
                Mà đợi đã có gì đó sai sai đang sử dụng Service mà lại khởi tạo Intent làm chi
                Chẳng phải Intent để chuyển đổi qua lại giữa các màn hình thôi sao xin thưa là không
                Intent có thể làm rất nhiều trò chứ không phải chỉ có mỗi trò chuyển đổi giữa các Activity và đây
                là một trong số những trò đó, trò gọi service
                */
                startService(playMusic);// Gọi hàm bắt đầu service

            }
        });
        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent playMusic = new Intent(MainActivity.this, MusicService.class);
               
                stopService(playMusic);// Gọi hàm hủy service khi không cần dùng đến nữa
                //// nếu không gọi hàm này nó sẽ tiếp tục chạy service đến khi nào hệ thống tự kill service đó
            }
        });
    }

    private void initControl() {
        //Cái này quá quen thuộc rồi khỏi nói ha
        play = (Button) findViewById(R.id.play);
        stop = (Button) findViewById(R.id.stop);
    }
}

File AndroidManifest.xml bạn phải khai báo thêm dịch vụ của mình vào thì mới dùng được

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tuandc.akinosora.unboundservice">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".MusicService"></service>// Khai báo dịch vụ
    </application>

</manifest>

Xong vậy chúng ta đã tạo xong một ứng dụng sử dụng Unbound Service giờ hãy chạy và cảm nhận nó.

Như vậy là tôi đã hướng dẫn các bạn sử dụng Unbound service rồi cảm ơn các bạn đã theo dõi và hẹn gặp lại các bạn ở các bài tiếp theo của Android truyền kì. Xin chào tạm biệt thân ái và quyết thắng.


Tags: service service trong andriud Unbound service


Nội dung liên quan