AIDL的解释这里就不多做赘述了,大家可以百度一下,应该很轻松可以百度出很多,虽然也要人工筛选一下百度的结果(啊呵呵哒)。
这里面我只就自己根据网上的资料写的例子做一些流程叙述,让大家也能够轻松实现一个AIDL例子。
话不多说,第一步:
1,建一个项目,Android studio默认一路走下来即可,建好后新建一个AIDL文件。
AIDL文件建好后,系统会自动生成一个aidl文件夹,文件夹里面的结构是这样的,上面的文件目录先不用管,我们等下会说。
注意“me.sulingzhi.com.aidltest”这个包名是自动生成的,和java下面那个package的名字是一样的,尽量保持不变,不需要节外生枝,这只是一个练习。接下来,我们打开这个 Calculation.aidl文件。
上面那个方法是自动生成的,我们不用管,我们只管写我们自己的。红色框内的代码自己敲一下。敲完之后看项目结构。
如图新建一个CalculateService类,继承service。
public class CalculateService extends Service{ public CalculateService(){ } @Override public void onCreate() { super.onCreate(); } @Override public void onDestroy() { super.onDestroy(); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); } @Nullable @Override public IBinder onBind(Intent intent) { return mBinder; } @Override public boolean onUnbind(Intent intent) { return super.onUnbind(intent); } Calculation.Stub mBinder=new Calculation.Stub(){ @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { } //这里是具体的实现逻辑 @Override public int addition(int a, int b) throws RemoteException { return a+b; } };
代码全部奉上。最后不要忘了在配置文件配置一下service哦。至于那个MainActivity的话,简单写两句吧,显示个helloworld什么的,程序员最拿手了。
至此,被调用端(也可以说服务端)的代码全部写完,下面写调用端(客户端)。
写调用端之前最好先把被调用端的代码跑起来,部署到真机上。
然后新建一个项目。项目package的名字不要跟之前的一样哦。
建完之后跟上一个项目一样,新建一个aidl文件
注意把包名改成和上一个项目的一样,要一模一样。包名,里面的代码,全部要一样。
然后奉上MainActivity的代码
package me.sulingzhi.com.calculateclient; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.IBinder; import android.os.RemoteException; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import me.sulingzhi.com.aidltest.Calculation; public class MainActivity extends AppCompatActivity { private TextView tvResult; private EditText edtNum1; private EditText edtNum2; private Button btnSubmit; private ServiceConnection mServiceConnection; private Calculation mCalculation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edtNum1 = (EditText) findViewById(R.id.num1); edtNum2 = (EditText) findViewById(R.id.num2); tvResult = (TextView) findViewById(R.id.result1); btnSubmit = (Button) findViewById(R.id.submit); mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { mCalculation = Calculation.Stub.asInterface(iBinder); } @Override public void onServiceDisconnected(ComponentName componentName) { mCalculation = null; } }; //这是连接aidl服务的代码 Intent intent = new Intent(); intent.setAction("me.sulingzhi.com.aidltest.CalculateService"); intent.setPackage("me.sulingzhi.com.aidltest"); bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE); btnSubmit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String s = edtNum1.getText().toString(); String s1 = edtNum2.getText().toString(); if (TextUtils.isEmpty(s) && TextUtils.isEmpty(s1)) { Toast.makeText(MainActivity.this, "您输入的数字不合法", Toast.LENGTH_SHORT).show(); } else { try { int addition = mCalculation.addition(Integer.parseInt(s), Integer.parseInt(s1)); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("调用远程服务获取到的计算结果是=="); stringBuilder.append(addition); tvResult.setText(stringBuilder.toString()); } catch (RemoteException e) { e.printStackTrace(); } } } }); } }
当然还有布局文件的代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="me.sulingzhi.com.calculateclient.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <EditText android:id="@+id/num1" android:layout_width="match_parent" android:layout_height="50dp" /> <TextView android:layout_width="50dp" android:layout_height="50dp" android:text="+" /> <EditText android:id="@+id/num2" android:layout_width="match_parent" android:layout_height="50dp" /> <TextView android:layout_width="50dp" android:layout_height="50dp" android:text="=" /> <TextView android:id="@+id/result1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" /> </LinearLayout> <Button android:id="@+id/submit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="计算"/> </LinearLayout>
好了,大功告成。