• android 不同进程间的调用 AIDL 实现通讯服务


    android 不同进程间的调用  AIDL 实现通讯服务

          近期对aidl android 不同进程间的调用,不同运用间的调用做了一些尝试:
    过程例如以下:
    1:首先在要被调用的程序里写好服务service


    详细代码例如以下:
    package com.jiaruihua.service.demo;
    
    import android.app.Service;
    import android.content.Intent;
    import android.os.Binder;
    import android.os.IBinder;
    
    public class AlipayService extends Service {
    
    	@Override
    	public IBinder onBind(Intent intent) {
    		// TODO Auto-generated method stub
    		
    		System.out.println("远程服务已绑定");
    		<span style="color:#ff0000;">//注意此处要返回我们的IBinder</span>
    		return new MyBinder();
    	}
    	@Override
    	public boolean onUnbind(Intent intent) {
    		// TODO Auto-generated method stub
    		System.out.println("远程服务已解除");
    		return super.onUnbind(intent);
    	}
    	@Override
    	public void onCreate() {
    		// TODO Auto-generated method stub
    		System.out.println("远程服务已创建");
    		super.onCreate();
    	}
    	
    	@Override
    	public void onDestroy() {
    		// TODO Auto-generated method stub
    		System.out.println("远程服务已销毁");
    		super.onDestroy();
    	}
    	/*
    *<span style="color:#ff0000;">此处是远程所要调用的方法,功能处理在此处</span>
    	 * 支付操作
    	 */
    	public void payMoney(){
    		
    		System.out.println("支付操作");
    		
    	}
    	/*
    *此处须要一个Iservice.Stub,这是我们定义的Iservice.aidl,所实现的,见第二步
    	 * Iservice.Stub 已经实现Binder 
    	 */
    	public class MyBinder extends <span style="color:#ff0000;">Iservice.Stub</span>{
    
    		@Override
    		public void callMethodService() {
    			payMoney();
    			
    		}
    		
    	}
    
    }
    

    2:创建上一步中须要一个Iservice.aidl文件



    代码例如以下:

    package com.jiaruihua.service.demo;
    //aidl 接口定义不须要訪问修饰符 默认公共
    
    interface Iservice {
    void callMethodService();
    }
    

    eclipse中的gen文件夹中会自己主动创建 Iservice.java文件

    3:在mainfest.xml文件里注冊Iservice

    4:在另外一个须要调用的程序中创建一个包,注意此处的包名要和 上面mainfest.xml中service的指定包名一致;
    让后将上面第二步创建的Iservice.aidl文件拷贝过来



    5:调用远程服务

    package com.example.mygameapp;
    
    import com.jiaruihua.service.demo.Iservice;
    
    import android.app.Activity;
    import android.app.Service;
    import android.content.ComponentName;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.os.RemoteException;
    import android.view.View;
    import android.view.View.OnClickListener;
    
    public class MainActivity extends Activity {
    
    	private Intent intent;
    
    	private Iservice iservice;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		intent = new Intent();
    		<span style="color:#ff0000;">// 此处的action 必须和你在调用的程序里设置的action 一至</span>
    		intent.setAction("com.jiaruihua.ServicePay");
    
    		// 绑定服务
    		findViewById(R.id.banding).setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View arg0) {
    				<span style="color:#ff0000;">// 绑定服务 开启服务</span>
    				bindService(intent, new MyConn(), BIND_AUTO_CREATE);
    			}
    		});
    		<span style="color:#ff0000;">// 调用远程方法</span>
    		findViewById(R.id.callmethod).setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View arg0) {
    				// TODO Auto-generated method stub
    				try {
    					iservice.callMethodService();
    				} catch (RemoteException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    	private class MyConn implements ServiceConnection {
    		// 成功绑定
    		@Override
    		public void onServiceConnected(ComponentName name, IBinder service) {
    			<span style="color:#ff0000;">// 将sercicse 转换成Iservice接口类型
    			iservice = Iservice.Stub.asInterface(service);</span>
    		}
    
    		@Override
    		public void onServiceDisconnected(ComponentName name) {
    			// TODO Auto-generated method stub
    
    		}
    
    	}
    
    }
    




  • 相关阅读:
    [Windows]Windows的访问控制模型
    [C/C++]宽字符与控制台程序
    [SQL Server]自动化附加和分离数据库
    [ASP.NET]自动发送邮件功能的实现
    [Windows]Windows路径探究
    asp.net中怎么样获取前一页地址
    CheckBox全选CheckBoxList
    远程SQL插入数据
    SQL存储过程调用作业的方法
    [转]javascript 调用后台函数
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6886089.html
Copyright © 2020-2023  润新知