編輯:關於Android編程
最近要面試了 沒 時間玩了.看了下安卓icp ,說實話一直沒過aidl這東東 發現網上帖子好多 下載的卻好少 .好吧自己玩了一個 留下做個備注吧.
服務端輸入文字會保存在sd卡 客戶端調用服務的service得到文字返回給客戶端
整理下步驟
1創建 aidl接口 文件implaidl.aidl 記得後綴 ,注意不要修飾符哦 我的如此的簡單 然後gen目錄自動身成了一個對應的包下的implaidl.java文件 裡面有個抽象的靜態內部類Stub 實現了我們的接口繼承了binder 我們發現安卓跨進程常用Ibinder接口,這太深奧我不懂 但是發現onbindservice時候connectionservice也會返回一個ibinder接口,這是安卓內部密碼把
package com.yung.aidlclient; interface implaidl{ String getText(); }
看一下工程目錄 很簡單明了
先做客戶端 包含implaidl.aidl的包是從服務端考過來就是了 所以客戶端只有一個類展示獲取服務端的數據
package com.yung.aidl; import android.app.Activity; 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.widget.TextView; import com.yung.aidlclient.implaidl; import com.yung.aidlservice.R; /** * 2015年4月11日 15:54:13 * * @author yung 這是調用者 客戶端 */ public class ShowServiceAct extends Activity { TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.mainact); tv = ((TextView) findViewById(R.id.textview1)); } @Override protected void onResume() { super.onResume(); // 這個action 是服務端的service在manidest注冊定義的action 的name bindService(new Intent(com.yung.aidl), new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub implaidl i = implaidl.Stub.asInterface(service); try { tv.setText(i.getText()); } catch (RemoteException e) { e.printStackTrace(); } } }, Context.BIND_AUTO_CREATE); } }
客戶端就一個展示服務端的數據 就可以了 OK
在看下服務端吧 服務端 提供一個輸入的界面 輸入的數據 保存在文件提供給客戶端
服務端 提供一個輸入的界面 輸入的數據 保存在文件提供給客戶端服務端 提供一個輸入的界面 輸入的數據 保存在文件提供給客戶端服務端 提供一個輸入的界面 輸入的數據 保存在文件提供給客戶端服務端 提供一個輸入的界面 輸入的數據 保存在文件提供給客戶端服務端 提供一個輸入的界面 輸入的數據 保存在文件提供給客戶端服務端 提供一個輸入的界面 輸入的數據 保存在文件提供給客戶端服務端 提供一個輸入的界面 輸入的數據 保存在文件提供給客戶端
package com.yung.aidlclient; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.Toast; /**服務端 提供一個輸入的界面 輸入的數據 保存在文件提供給客戶端 * @author yung * */ public class Main_ShowServiceAct extends Activity implements OnClickListener { public EditText ed; public static String filePath = aidl.text; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.mainact); ed = (EditText) findViewById(R.id.editText1); } @Override public void onClick(View v) { saveTextContent(ed.getText().toString() + 保存時間: + System.currentTimeMillis()); } private void saveTextContent(String str) { File file = new File(getsdpath() + / + filePath); try { if (!file.exists()) file.createNewFile(); FileOutputStream out = new FileOutputStream(file); out.write(str.getBytes()); out.flush(); out.close(); Toast.makeText(this, 文字保存完畢, Toast.LENGTH_SHORT).show(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static String getsdpath() { return Environment.getExternalStorageDirectory().getAbsolutePath(); } }
最終要的service出來的 這個service在服務端實現了處理 但是在終端調用
package com.yung.aidlclient; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.os.RemoteException; /** * 服務端的服務 提供給客戶端調用 * * @author yung 2015年4月11日 16:18:23 */ public class AcceptServiceSer extends Service { @Override public IBinder onBind(Intent intent) { return new implaidl.Stub() { @Override public String getText() throws RemoteException { return getTextContent(); } }; } //由於 public String getTextContent() { File file = new File(Main_ShowServiceAct.getsdpath() + / + Main_ShowServiceAct.filePath); FileInputStream read; try { read = new FileInputStream(file); byte[] bys = new byte[read.available()]; read.read(bys); return new String(bys); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }
加上服務斷的清單文件
本篇介紹ListView控件,這是Android中比較重要也比較復雜的控件,這裡只談到使用ViewHolder機制優化即可。一、ListView簡介ListView是An
在最近的兩篇Qt on Android中學習了怎麼使用基礎的JNI以及如何使用外部IDE來管理Qt應用的Java部分。這章呢,我們繼續前進,關注如何擴展我們的
當我們第一次下載QQ並且打開的時候,會有一個新手引導,引導是幾張圖片,再加上一些文字說明,向右滑動,直到結束,今天一大早起來研究了一下關於此種效果的實現之ViewPage
本節引言: 本節主要介紹的是Android系統服務中的---AlarmManager(鬧鐘服務), 除了開發手機鬧鐘外,更多的時候是作為一個全