Android开发基础-service使用

来源:互联网 发布:文件夹加密软件解密 编辑:程序博客网 时间:2024/04/27 22:33

本事实验使用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

0 0