android aidl

 

 

 

 

 

 

AIDL(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要在一个Activity中, 访问另一个Service中的某个对象, 需要先将对象转化成AIDL可识别的参数(可能是多个参数), 然后使用AIDL来传递这些参数, 在消息的接收端, 使用这些参数组装成自己需要的对象.

 

 

1.定义:src/package/IPlayer.aidl文件。

如:

 

package com.chonwhite.mplayer;     //--要有包的全称。
interface IPlayer{
    void play();
    void pause();
    void stop();
    int getDuration();
    int getCurrentTime();
    void setCurrent(int cur);
    boolean isPlaying();
}

 

2.定义Service 服务

public class LocalService extends Service {
    private NotificationManager mNM;
    private MediaPlayer mPlayer;
    IPlayer.Stub stub = new IPlayer.Stub() {

        public void play() throws RemoteException {
            mPlayer.start();           
        }

        public void pause() throws RemoteException {
            mPlayer.pause();
        }

        public void stop() throws RemoteException {
            mPlayer.stop();
        }

        public int getDuration() throws RemoteException {
            return mPlayer.getDuration();
        }

        public int getCurrentTime() throws RemoteException {
            return mPlayer.getCurrentPosition();
        }

        public void setCurrent(int cur) throws RemoteException {
            mPlayer.seekTo(cur);
        }

        public boolean isPlaying() throws RemoteException {
            return mPlayer.isPlaying();
        }
    };
    @Override
    public void onCreate() {
        mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
        mPlayer = MediaPlayer.create(this, R.raw.fly);
        mPlayer.start();
       
        showNotification();
    }
 
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i("LocalService", "Received start id " + startId + ": " + intent);
        // We want this service to continue running until it is explicitly
        // stopped, so return sticky.
        return START_STICKY;
    }
 
    @Override
    public void onDestroy() {
        // Cancel the persistent notification.
        mNM.cancel("ServiceStarted", 0);
 
        // Tell the user we stopped.
        Toast.makeText(this, "ServiceStoped", Toast.LENGTH_SHORT).show();
    }
  
    @Override
    public IBinder onBind(Intent intent) {
       
        return stub;
    }
 
    @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
    }

    /**
     * Show a notification while this service is running.
     */
    private void showNotification() {
        // In this sample, we'll use the same text for the ticker and the expanded notification
        CharSequence text = "LocalServiceStarted";
 
        // Set the icon, scrolling text and timestamp
        Notification notification = new Notification(R.drawable.icon, text,
                System.currentTimeMillis());
 
        // The PendingIntent to launch our activity if the user selects this notification
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                new Intent(this, Main.class), 0);
 
        // Set the info for the views that show in the notification panel.
        notification.setLatestEventInfo(this, "ServiceLable",
                       text, contentIntent);
 
        // Send the notification.
        // We use a layout id because it is a unique number.  We use it later to cancel.
        mNM.notify("LocalServiceStarted", 0, notification);
    }
   
 }

 

 

3.调用Service

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

 

        bindService(new Intent(Main.this, LocalService.class), mConnection, Context.BIND_AUTO_CREATE);

}

 

 

    void doUnbindService() {
         unbindService(mConnection);
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        doUnbindService();
    }

 

    private ServiceConnection mConnection = new ServiceConnection() {
        public void onServiceConnected(ComponentName className, IBinder service) {
            mPlayer = IPlayer.Stub.asInterface(service);
            // Tell the user about this for our demo.
            Toast.makeText(Main.this, getString(R.string.serviceconnected),
                    Toast.LENGTH_SHORT).show();
        }
        public void onServiceDisconnected(ComponentName className) {
            mPlayer = null;
            Toast.makeText(Main.this, getString(R.string.serviedisconnected),
                    Toast.LENGTH_SHORT).show();
        };
    };

 

 

4:Android.mk

 

添加:

LOCAL_SRC_FILES := $(call all-java-files-under, src) /
    src/com/chonwhite/mplayer/IPlayer.aidl

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值