AIDL的小demo

来源:互联网 发布:三菱plcfx3u编程手册 编辑:程序博客网 时间:2024/05/26 02:19

首先服务端的代码.

aidl:

package com.example.aidlserver;interface IRemote{  int add(int a, int b);}

MainActivity类的代码:
package com.example.aidlserver;import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.activity_main, menu);return true;}}

ArithmeticService类的代码:
package com.example.aidlserver;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.RemoteException;public class ArithmeticService extends Service{@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn mBinder;}/** * IRemote defnition is available here */private final IRemote.Stub mBinder = new IRemote.Stub() {@Overridepublic int add(int a, int b) throws RemoteException {// TODO Auto-generated method stubreturn (a + b);}};}
接下来是客户端的代码:

同上:aidl代码:

package com.example.aidlserver;interface IRemote{  int add(int a, int b);}
MainActivity类代码:
package com.example.aidlclient;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.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import com.example.aidlserver.IRemote;public class MainActivity extends Activity implements OnClickListener  {EditText mFirst,mSecond;Button mAdd,mSubtract,mClear;TextView mResultText;protected IRemote mService;ServiceConnection mServiceConnection;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mFirst = (EditText) findViewById(R.id.firstValue);mSecond = (EditText) findViewById(R.id.secondValue);    mResultText = (TextView) findViewById(R.id.resultText);mAdd = (Button) findViewById(R.id.add);mAdd.setOnClickListener(this);initConnection();}void initConnection(){    mServiceConnection = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stubmService = null;Toast.makeText(getApplicationContext(), "no", Toast.LENGTH_SHORT).show();Log.d("IRemote", "Binding - Service disconnected");}@Overridepublic void onServiceConnected(ComponentName name, IBinder service){// TODO Auto-generated method stubmService = IRemote.Stub.asInterface((IBinder) service);Toast.makeText(getApplicationContext(), "yes", Toast.LENGTH_SHORT).show();Log.d("IRemote", "Binding is done - Service connected");}};if(mService == null){Intent it = new Intent();it.setAction("com.remote.service.CALCULATOR");//binding to remote servicebindService(it, mServiceConnection, Service.BIND_AUTO_CREATE);}}protected void onDestroy() {super.onDestroy();unbindService(mServiceConnection);};@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch(v.getId()){case R.id.add:{int a = Integer.parseInt(mFirst.getText().toString());int b = Integer.parseInt(mSecond.getText().toString());try{mResultText.setText("Result -> Add ->"+mService.add(a,b));Log.d("IRemote", "Binding - Add operation");} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;  }}}
源代码:http://download.csdn.net/detail/asfg5369/9527935

0 0