Android Service 示例

  • 简单的服务

首先在eclipse中创建Android工程TestService和TestActivity.java,同时创建服务类MyService

public class MyService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        Toast.makeText(this, "Service created...", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Toast.makeText(this, "Service destroyed...", Toast.LENGTH_LONG).show();
    }

}

其次,在AndroidManifest.xml中声明该服务,注意和activity保持平级

第三,在res目录中创建文件夹raw,添加qingshang.mp3至该文件夹。

第四,在main.xml中添加两个button,位于节点下

 

第五,在TestActivity.java中的onCreate回调中添加代码

public class TestActivity extends Activity {
    public String MYSERVICE = "com.kortide.service.MyService";
    public String CONTROLMUSICSERVICE = "com.kortide.service.ControlMusicService";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // 创建2个按钮控制服务
        Button startbtn = (Button) findViewById(R.id.btn_start);
        Button stopbtn = (Button) findViewById(R.id.btn_stop);
        startbtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // 启动服务,通过Intent的方法来启动
                Intent serviceIntent = new Intent();
                serviceIntent.setAction(MYSERVICE);
                startService(serviceIntent);
            }
        });
        stopbtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent serviceIntent = new Intent();
                serviceIntent.setAction(MYSERVICE);
                stopService(serviceIntent);
            }
        });
        Toast.makeText(this, "TestActivity created...", Toast.LENGTH_LONG).show();
        Log.i("CHEN", "TestActivity created...");
    }
}

第六,选择菜单Run->Run,选择“Android Application”查看运行结果

  • 通过ADIL调用服务

首先,创建Android工程BindService和BindService.java,创建IMusicControlService.aidl(可以使用菜单File->New->File来创建),elipse会在gen中自动创建一些代码

interface IMusicControlService
{
        void playMusic();
        void stopMusic();
}

其次,同上面的示例,在res目录中创建文件夹raw,添加qingshang.mp3至该文件夹。AndroidManifest.xml中声明该服务。


    

main.xml中添加两个button。

 

第三,创建类ControlMusicService

public class ControlMusicService extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }
    public MediaPlayer mplayer;

    private final IMusicControlService.Stub binder = new IMusicControlService.Stub() {
        MediaPlayer player;

        @Override
        public void playMusic() throws RemoteException {
            Log.i("CHEN", "Play music...");
            player = MediaPlayer.create(ControlMusicService.this,
                    R.raw.qingshang);
            player.start();
        }

        @Override
        public void stopMusic() throws RemoteException {
            Log.i("CHEN", "Stop music...");
            if (player.isPlaying()) {
                player.stop();
            }
        }
    };
}

在BindService.java中添加绑定服务的代码

public class BindService extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent intent = new Intent();
        intent.setClass(this,ControlMusicService.class);
        bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
        Log.i("CHEN", "Bind service...");
        Button btnplay = (Button)findViewById(R.id.btn_play);
        Button btnstop = (Button)findViewById(R.id.btn_stop);
        btnplay.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                try {
                    iMusicControlService.playMusic();
                } catch (RemoteException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        btnstop.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                try {
                    iMusicControlService.stopMusic();
                } catch (RemoteException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }
    public IMusicControlService iMusicControlService;
    private final ServiceConnection serviceConnection = new ServiceConnection() {
        // 第一次连接service时会调用这个方法
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            iMusicControlService = IMusicControlService.Stub
                    .asInterface(service);
        }

        // service断开的时候会调用这个方法
        @Override
        public void onServiceDisconnected(ComponentName name) {
            iMusicControlService = null;
        }

    };
}

参考资料

  1. 通过AIDL调用Service

http://www.eoeandroid.com/viewthread.php?tid=1260

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值