进程间通信

新建一个项目充当发送者

1.创建一个以.aidl为后缀名的文件

IMyService.aidl

package com.example.aidldemo

interface IMyService{

  String getValue();

  String getName();

  String getPrice();

}

系统会在gen目录中自动创建一个IMyService类

2.编写一个服务 并在服务中实现IMyService接口

private IMyservice.Stub binder = new IMyservice.Stub() {      

   public String getValue() throws RemoteException {    

    // TODO Auto-generated method stub    

    return "Android";   

    }

    public String getName() throws RemoteException {    

    // TODO Auto-generated method stub    

    return "hello world";   

    }

    public float getPrice() throws RemoteException {   

     // TODO Auto-generated method stub    

    return 10.0F;   

  }  

};

在manifase中注册MyService添加android:process=":remote"

由于需要在其他应用中使用,所以要在remote之前要添加冒号

给service添加过滤器

<intent-filter >
                <action android:name="com.example.aidldemo.IMyservice"/>

</intent-filter>

 

 

另外建一个项目充当接受者

把上面的.aidl文件复制到这个项目中,报名要相同

在布局文件中放一个textview用来接受value

放三个button,第一个用来bind服务  第二个用来显示向textview赋值  第三个解绑

 

在mainavtivity类

 

package com.example.aidlkhd;



import android.app.Activity;

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.Menu;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;



import com.example.aidldemo.IMyservice;



public class MainActivity extends Activity {

	private Button button1,button2,button3;

	private TextView textview;

	private IMyservice iservice = null;

	@Override

	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_main);

		button1 = (Button) findViewById(R.id.button1);

		button2 = (Button) findViewById(R.id.button2);

		button3 = (Button) findViewById(R.id.button3);

		textview = (TextView) findViewById(R.id.textview);

	}

	public void bind(View v){

		Intent service = new Intent(IMyservice.class.getName());

		bindService(service,connection , BIND_AUTO_CREATE);

	}

	public void getdata(View v){

		try {

			textview.setText("运行结果="+iservice.getValue());

		} catch (RemoteException e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

		}

	}

	public void unbind(View v){

		unbindService(connection);

	}

	private ServiceConnection connection = new ServiceConnection(){



		public void onServiceConnected(ComponentName arg0, IBinder arg1) {

			// TODO Auto-generated method stub

			//从远程service中获得AIDL实例化对象

			iservice = IMyservice.Stub.asInterface(arg1);

			System.out.println("Bind Success:"+iservice);

		}



		public void onServiceDisconnected(ComponentName arg0) {

			// TODO Auto-generated method stub

			iservice = null;

		}

		

	};

	@Override

	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;

	}



}

 

 

你可能感兴趣的:(通信)