您的位置:首页 > 移动开发 > Android开发

android aidl接口初步了解

2015-12-03 00:00 1256 查看
摘要: 本文以最简单的代码解说aidl,本文是androidstudio开发。。app指的是创建项目。。mylibrary是依赖工程,大致思路:在项目中创建一个依赖工程,在依赖工程中创建aidl文件(记得重新构建工程),创建service服务类,注册服务,在app类中创建aidl文件(必须和依赖工程的aidl文件一致),开启服务。。得到数据(google在5.0之前。。bindService开启是隐式意图;5.0则要设置为显示意图。。不然会异常退出);

//app类

package com.qudoulicai.www.aidltest;

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.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;

import com.qudoulicai.www.mylibrary.*;
import com.qudoulicai.www.mylibrary.Aidlone;

public class MainActivity extends AppCompatActivity {

private TextView titles;
public Button onclick;

Aidlone aidlone;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
titles = (TextView) findViewById(R.id.titles);
onclick = (Button) findViewById(R.id.onclick);

onclick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

Intent intent = new Intent();

//5.0版本则设置为显示意图
//否则设置为Intent intent = new Intent("you action("参考mylibrary清单文件")")
intent.setClass(MainActivity.this, MAIDLService.class);
bindService(intent, connection, BIND_AUTO_CREATE);

}
});
}

ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
try {
aidlone = Aidlone.Stub.asInterface(service);
Log.e("张三",aidlone.getName().length()+"");
titles.setText(aidlone.getName());

} catch (Exception e) {
e.printStackTrace();
}
}

//
@Override
public void onServiceDisconnected(ComponentName name) {
Log.e("张三","失败");
}
};
}

//app中的aidl

// Aidlone.aidl
package com.qudoulicai.www.aidltest;

// Declare any non-default types here with import statements

interface Aidlone {

String getName();
}

//mylibrary依赖包

//服务类

package com.qudoulicai.www.mylibrary;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.annotation.Nullable;

/**
* Created by Lenovo on 2015/12/3.
*/
public class MAIDLService extends Service {

public MAIDLService(){

}

Aidlone.Stub sumber = new Aidlone.Stub(){

@Override
public String getName() throws RemoteException {
return "张三";
}
};

@Nullable
@Override
public IBinder onBind(Intent intent) {
return sumber;
}
}

//aidl文件

// Aidlone.aidl
package com.qudoulicai.www.mylibrary;

// Declare any non-default types here with import statements

interface Aidlone {
String getName();
}

//mylibrary清单文件

<service
android:name="com.qudoulicai.www.mylibrary.MAIDLService"
android:process=":remote"
>
<intent-filter>
<action android:name="com.qudoulicai.www.mylibrary.MAIDLService"></action>
</intent-filter>
</service>

//app中的布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.qudoulicai.www.aidltest.MainActivity"
tools:showIn="@layout/activity_main">

<TextView
android:id="@+id/titles"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />

<Button
android:id="@+id/onclick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="单击"/>
</LinearLayout>


//ps:有不足之处请多包涵。。。创建依赖文件记得引用文件“

compile project(':"you libray name"')

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  aidl android