安卓IPC之aidl使用(二)---aidl本地實現
一直都以為aidl必須寫一個服務端是吧,那樣豈不是有時候需求怎麼實現,如果app的service和client屬於同一app,那樣實現是不是更好的滿足我們的需求呢。
本例子我們實現一個很簡單的例子:實現2個數相加
// ILocal.aidl
package com.losileeya.localaidl;
// Declare any non-default types here with import statements
interface ILocal {
int add(in int num1,in int num2);
}
因為不需要在寫service了,所以我們這裡需要寫LoaclAidlService
package com.losileeya.localaidl;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.annotation.Nullable;
/**
* User: Losileeya ( [email protected])
* Date: 2016-07-10
* Time: 11:09
* 類描述:
*
* @version :
*/
public class LoaclAidlService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new MBinder();
}
class MBinder extends ILocal.Stub{
@Override
public int add(int num1, int num2) throws RemoteException {
return doAdd(num1,num2);
}
}
private int doAdd(int num1, int num2) {
return num1+num2;
}
public class LocalConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
service= (IBinder) ILocal.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
name=null;
}
}
}
然後使用也很簡單
package com.losileeya.localaidl;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ILocal iLocal=null;
private EditText etNum1,etNum2,etResult;
private Button btnCalculate;
private LocationConnection connection=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
bindService();
}
private void initView() {
etNum1= (EditText) findViewById(R.id.et_num1);
etNum2= (EditText) findViewById(R.id.et_num2);
etResult= (EditText) findViewById(R.id.et_result);
btnCalculate= (Button) findViewById(R.id.btn_calculate);
btnCalculate.setOnClickListener(this);
}
private void bindService() {
connection=new LocationConnection();
Intent intent=new Intent();
intent.setComponent(new ComponentName("com.losileeya.localaidl","com.losileeya.localaidl.LoaclAidlService"));
bindService(intent,connection, Context.BIND_AUTO_CREATE);
}
class LocationConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
iLocal = ILocal.Stub.asInterface((IBinder)service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
iLocal=null;
}
};
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(connection);
connection=null;
}
@Override
public void onClick(View v) {
int num1=Integer.parseInt(etNum1.getText().toString().trim());
int num2=Integer.parseInt(etNum2.getText().toString().trim());
try {
int result=iLocal.add(num1,num2);
etResult.setText(result+"");
} catch (RemoteException e) {
e.printStackTrace();
etResult.setText("失敗");
}
}
}
是不是和前面一個例子使用起來沒有什麼兩樣,只不過把LoaclAidlService搬到客戶端來了(2合一了是嗎)。仔細一看,還是有一點的區別,請仔細對照程式碼自行體會。
清單配置LoaclAidlService
<service android:name=".LoaclAidlService"
android:process=":remmote">
<intent-filter>
<action android:name="com.losileeya.localaidl.LoaclAidlService"></action>
</intent-filter>
</service>
這裡把service 標記為android:process=”:remmote”,這樣aidl就能被遠端呼叫了。
效果如下:
相關推薦
安卓-ListView側滑(二)之SwipeMenuListView新增menu.getViewType()屬性控制是否側滑
這篇部落格記錄的是曾經做過的一個專案,需求是一個list裡面要求有的部分可以側滑刪除,有的部分不可以,側滑用的是開源專案SwipeMenuListView在網上查了些資料,根據這個需求又自己做了調整,終於完美的解決了,好,上程式碼。 1.在gradle中新增depend
安卓開發學習筆記(二):Android Stuidio無法引用Intent來創建對象,出現cannot resolve xxx
編譯器 port stact 消失 click first 紅色 xxx font 筆者在進行安卓開發時,發現自己的代碼語法完全沒有問題。尤其是創建intent對象的時候,語法完全是正確的,但是Android Stuidio卻顯示報錯,Intent類顯示為紅色,如圖所示:
非同步程式設計學習之路(二)-通過Synchronize實現執行緒安全的多執行緒
本文是非同步程式設計學習之路(二)-通過Synchronize實現執行緒安全的多執行緒,若要關注前文,請點選傳送門: 非同步程式設計學習之路(一)-通過Thread實現簡單多執行緒(執行緒不安全) 上篇我們通過Thread實現了幾種執行緒不安全的多執行緒寫法,導致最後的結果與預期的值不一樣。
安卓IPC之aidl使用(二)---aidl本地實現
一直都以為aidl必須寫一個服務端是吧,那樣豈不是有時候需求怎麼實現,如果app的service和client屬於同一app,那樣實現是不是更好的滿足我們的需求呢。 本例子我們實現一個很簡單的例子:實現2個數相加 // ILocal.aidl pac
我的安卓進階之路(二)
這周結束了“活動”,開始了UI的征程。 1、七大控制元件 踩的兩個小坑 第一個,ImageView即圖片控制元件,名稱必須以字母開頭。如1img不行,而img2可以,倒是和變數名的命名相類似。 第
CocosCreator之KUOKUO分享安卓打包成功過程(3)
很多小夥伴卡在了安卓打包的過程,被折磨的欲仙欲死,面對小夥伴的一些問題,有時候我也感覺莫名其妙的,console.log(滑稽)。 今天我把自己成功打包的過程詳細滴發一遍,供大家參考。O(∩_∩)O~~ 電腦Windows10,64位 CocosCreator引擎版本v2.0.5 然
安卓使用記錄筆記(1)ndk使用之Java呼叫c++程式碼
1.在Java中新建一個Utils類 1)指定路徑下新建一個資料夾 ,包名為Utils 2) 新建類 NativeUtils.java package com.sample.Utils; publi
深入學習之mysql(二)表的操作
uniq order fault change incr 相關 約束 設置 type 1、表:是數據庫中的存儲數據的基本單位,一個表包含若幹個字段和值 2、創建表: CREATE TABLE 表名稱 ( 字段名1 數據庫類型1 [約束條件1], 字段名2
[轉]Web APi之認證(Authentication)兩種實現方式【二】(十三)
用戶數 ted das 客戶 元素 基礎 目標 開始 net 本文轉自:http://www.cnblogs.com/CreateMyself/p/4857799.html 前言 上一節我們詳細講解了認證及其基本信息,這一節我們通過兩種不同方式來實現認證,並且分析如
自動化運維之saltstack(二)states介紹及使用
配置文件 如何 states master 根目錄 一、什麽是Salt States?Salt States是Salt模塊的擴展,主系統使用的狀態系統叫SLS系統,SLS代表Saltstack State,Salt是一些狀態文件,其中包含有關如何配置Salt子節點的信息,這些狀態被存放在一
Spring MVC 的 研發之路 (二)
eight 對象 files tin servlet映射 資源 研發 領域 延遲 二、web.xml的簡單配置介紹1 1、啟動Web項目時,容器回去讀web.xml配置文件裏的兩個節點<context-param>和<listener
安卓開發筆記 Activity(四)
nac 創建 intent nbsp star lda this 空白 空白頁 Activity -> Intent -> Activity startActivity(Intent) 創建Activity 步驟: 右擊->new
angular 4 實戰開發--安卓兼容問題(1)
部門 方案 我們 是我 是不是 實戰 發現 版本 功能 首先我強調下我只是個菜鳥,大神不喜勿噴。 先介紹下項目背景,主要是公司的官網h5 ,架構用的是angular4 有點大材小用的趕腳,but ,公司要求。 在項目主功能做的差不多了。交給測試,這時候發現百度瀏覽器,u
Java面向對象編程之繼承(二)
抽象方法 oid 修飾 屬於 ... 方法的參數 要求 ring 覆蓋 在上一篇博客中,我們已經了解繼承的基本概念和語法,那麽今天我們就來聊一聊有關於繼承的其他東西。 讓我們來了解一下什麽是方法重載(overload)和方法覆蓋(override) 方法重載(overloa
SIPp常用腳本之UAS(二)
invite pcm option 響應 etime aud 服務器 esp contact 看名字就能猜出來,這是作為SIP消息服務端的存在,啟動uas,等著接受SIP消息並且給出響應。 一、uas.xml <?xml version="2.0" encoding
Java學習之路(二)流程控制語句
循環 cas 學習之路 將不 乘法表 length 跳出循環 spa int if、if…else…語句 if (true) { System.out.println("為真時執行");
二次元碼農的成長之路(二)json到底有什麽用途
頁面 asc 語法 處理 交互 分隔 規則 stl 成長之路 寫的有問題請指出 一、什麽是json 1json指的是javaScript的表示方法 2JSON是輕量級的文本數據交換格式 3 Json是獨立語言 4 json具有自我描述性 更易理解 二、語法規則 1對
Hibernate框架之路(二)一對多關系
true pre conn 關系 編寫 none isp exce dia 在下列案例中: 客戶是一;聯系人是多;客戶可以擁有多個聯系人;一個聯系人只有一個客戶 1、編寫實體類 package com.pojo; import java.util
Hibernate框架之路(二)多對多多關系
-m let ble ssi gin rop assert on() odi 1、配置實體類 package cn.pojo; import java.util.HashSet; import java.util.Set; public class
基礎篇之集合(二)總結
線程不安全 emp abstract 和集 write next 不可變 叠代器 關系 1. Map集合和collection結合的區別 1》Collection一次存一個元素;Map一次存一對元素; 2》Collection是單列集合;Map是雙列集合; 3》Map中的存