Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android中實現跨app之間數據的暴露與接收,androidapp

Android中實現跨app之間數據的暴露與接收,androidapp

編輯:關於android開發

Android中實現跨app之間數據的暴露與接收,androidapp


例如一個小項目:實現單詞本的添加單詞等功能

功能:不同的方式實現跨app之間數據的暴露與接收
  暴露端app:實現單詞的添加(Word、Translate),增刪改查;
  接收端app:模糊查詢,得到暴露端的數據。

暴露端主頁及布局:
1、布局:
  主頁布局:ListView、TextView(empty)
  item布局:TextView(單詞)、TextView(翻譯)
  添加或修改單詞的Dialog布局:EditText(hint="word")、EditText(hint="translate")

2、菜單:
  選項菜單:添加(單詞)
  上下文菜單:刪除、修改(ListView上)

3、主頁程序:
  初始化MySQLiteOpenHelper(工具類)、初始化控件
  數據庫的操作、自定義對話框、設置適配器、創建選項菜單、上下文菜單

  接收端主頁及布局:
  1、布局:主頁布局:EditText(關鍵詞)、Button(點擊查詢)、ListView、TextView(empty)
        item布局:TextView(單詞)、TextView(翻譯)
  2、主頁:初始化控件,解析得到的String返回集合,設置適配器

一、Content-Provider


Provider:
  1、自定義Provider繼承ContentProvider,重寫6個抽象方法
  2、定義靜態代碼塊:目的是定義多個Uri地址。
  3、聲明SQLiteDatabase、MySQLiteOpenHelper,生命周期onCreate()中,實例化
  4、重寫數據庫的增刪改查:根據UriMatcher對象的match(uri)方法的返回值進行CRUD
  注意:查詢的時候,返回的是Uri對象:
  long id = dbConn.insert("tb_words",null,values);
  Uri uri_id = ContentUris.withAppendedId(uri,id);
  5、清單中注冊:節點:<provider>:authorities、name、exported

Resolver:
  1、定義ContentResolver,及uriString:提供者定義的authorities
     resolver=getContentResolver();

  2、查詢:resolver.query(Uri.parse(uri)-->>返回Cursor

  3、如有需求,可使用Loader方法:當提供者數據發生改變時及時更新,
    ①、實現LoaderManager.LoaderCallbacks<Cursor>:
    ②、初始化LoaderManager:
        loaderManager = getLoaderManager();
        loaderManager.initLoader(LOADER_ID, null, this);
    ③、實現三個方法:
        onCreateLoader(){return new CursorLoader(6個參數)}、
        onLoadFinished(){adapter.changeCursor(data)}、
        onLoaderReset(){adapter.changeCursor(null)}

二、AIDL:Android Interface Define Language


服務端:
  1、aidl文件夾-->包-->後綴.aidl-->抽象方法,形參為要傳遞的數據,返回String
  2、自定義服務類,繼承Service
    ①、onCreate()中,初始化helper對象
    ②、自定義內部類繼承自定義的aidl中的Stub,重寫一個自定義的抽象方法,其中執行數據庫的查操作,得到集合,

      可適當的處理集合得到String,以便接收者解析
    ③、onBind()中,返回new MyBinder()對象
  3、清單注冊,包含<Intent-filter>節點<action>屬性:建議包名.類名

客戶端:

  1、同服務端第一條,可復制.aidl文件,不建議復制文件夾
  2、主頁:聲明自定義的.aidl的接口,綁定服務:
    bindService(intent, conn, BIND_AUTO_CREATE)-->返回boolean,綁定成功否
    集齊三個參數intent.setPackage、setAction(包名.類名)、創建conn的時候,重寫兩個方法,

    建立連接時:實例化myInterface等於Stub.asInterface(iBinder),斷開連接賦值為null、第三個參數建議為BIND_AUTO_CREATE
  3、既然myInterface已經實例化,就可以調用裡面的方法,處理返回的數據,加載到ListView上
  4、解除綁定


三、Messenger
服務端:
  1、自定義服務類繼承Service
  2、初始化信使、數據庫操作工具類對象的聲明
  3、周期方法onCreate()中:初始化helper對象、信使對象:
    Handler handler = new Handler(){//第5步、第6步}
    messenger = new Messenger(handler);
  4、重寫onBind()方法,返回messenger.getBinder()
  5、在Handler{}內,對客戶端傳過來的信息進行事後處理,將處理的消息返回給客戶端:
    執行查操作(查詢條件為,msg.getData().getString()+"%")返回集合,定義Message,what值為1,

    攜帶setData(bundle),Bundle攜帶String
  6、定義信使對象等於msg.replyTo,信使對象發送message
  7、清單注冊:包含<Intent-filter>節點<action>屬性:建議包名.類名

客戶端:
  1、聲明兩個信使對象messenger、messenger_reply;
  2、bindMyService綁定服務;
    bindService(intent, conn,BIND_AUTO_CREATE):集齊三個參數:
    intent.setPackage、setAction(包名.類名)、創建conn的時候,重寫兩個方法,建立連接時:
    實例化messenger = new Messenger(service);,
    斷開連接賦值為null、第三個參數建議為BIND_AUTO_CREATE
  3、initMesengerReply初始化返回信使:
    Handler handler = new Handler(){//第5步}、messenger_reply = new Messenger(handler);
  4、客戶端向服務端發送請求信息:
    定義Message,msg.setData(bundle),Bundle攜帶String(查詢的關鍵詞)、重點:
    msg.replyTo = messenger_reply、messenger.send(msg)
  5、返回信使對返回信息進行事後處理:msg.what = 1、
  String result = msg.getData().getString("result");
  6、處理得到的result加載到listView控件上

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved