Android开发基础-service使用

本事实验使用service实现背景音乐功能,主要使用MediaPlayer控件实现。
service 你可以理解成没有的界面的activity,它是跑在后台的程序,所谓后台是相对于可以被看得到的程序的,后台程序是不能直接交互的程序。
程序中使用Binder机制,而Binder机制在很多很多的Service就是通过Binder机制来和客户端通讯交互的。
binder主要是用来进程间通信的,但也可用在和本地service通信。
本次实验使用MediaPlayer对象
主要的方法:

  1. create(url);是从url中获取一个应用自带的mp3文件.
  2. setOnCompletionListener();是为对象添加一个监听事件,用于监听事件完成.
  3. setLooping();设置音乐循环播放。

创建一个android项目。

 1. 在res文件下创建raw文件夹把mp3文件在此目录下
 2. 创建含有一个播放一个停止的按钮的布局文件
 3. 创建一个AudioService类。在清单AndroidManifest.xml中添加
<service android:name="com.example.service.AudioService"></service>

AudioService.java

  public class AudioService extends Service implements
        MediaPlayer.OnCompletionListener {
    // 实例化MediaPlayer对象
    MediaPlayer player;
    private final IBinder binder = new AudioBinder();

    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }

    public void onCreate() {
        super.onCreate();
        // 从raw文件夹中获取一个应用自带的mp3文件
        player = MediaPlayer.create(this, R.raw.qq);
        player.setOnCompletionListener(this);// 是为player对象添加一个监听事件,用于监听事件完成
        player.setLooping(true);//
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        if (!player.isPlaying()) {
            new MusicPlayThread().start();
        } else
            player.isPlaying();
        return START_STICKY;
    }

    /**
     * 当Audio播放完的时候触发该动作
     */
    public void onCompletion(MediaPlayer mp) {
        stopSelf();// 结束了,则结束Service

    }

    public void onDestroy() {
        super.onDestroy();
        if (player.isPlaying()) {
            player.stop();
        }
        player.release();
    }

    // 为了和Activity交互,我们需要定义一个Binder对象
    public class AudioBinder extends Binder {
        // 返回Service对象
        public AudioService getService() {
            return AudioService.this;
        }
    }
    private class MusicPlayThread extends Thread {
        public void run() {
            if (!player.isPlaying()) {
                player.start();
            }
        }
    }
}

在MainActivity.java中添加

    public class MainActivity extends Activity {
    Button playing, stop;// 声明控件变量

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findId();
        playing.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                startService(new Intent(MainActivity.this, AudioService.class));// 启动service服务转向AudioService
            }
        });
        stop.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                stopService(new Intent(MainActivity.this, AudioService.class));// 停止service
            }
        });
    }

    void findId() {// 获取控件id
        playing = (Button) findViewById(R.id.playing);
        stop = (Button) findViewById(R.id.stop);
    }

    protected void onResume() {// 在 Activity 从 Pause 状态转换到 Active 状态时被调用。
        super.onResume();
        startService(new Intent(MainActivity.this, AudioService.class));
    }

    @Override
    protected void onDestroy() {// 防止程序退出后音乐不停止问题。在destroy中停止服务
        // TODO Auto-generated method stub
        super.onDestroy();
        stopService(new Intent(MainActivity.this, AudioService.class));// 停止service
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
  1. 启动程序即可

本次代码实现http://download.csdn.net/detail/kong_z/8859389

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值