AllJoyn+Android開發案例-android跨裝置呼叫方法
注意:靜態初始化塊中的loadlibrary不能少掉。上面的例子參照的是chat原始碼。package com.example.siemens.testgetmethod; import android.app.Service; import android.content.Intent; import android.net.wifi.WifiConfiguration; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.util.Log; import android.widget.Toast; import org.alljoyn.bus.BusAttachment; import org.alljoyn.bus.BusObject; import org.alljoyn.bus.Mutable; import org.alljoyn.bus.SessionOpts; import org.alljoyn.bus.SessionPortListener; import org.alljoyn.bus.Status; import javax.net.ssl.SSLEngineResult; public class MyService extends Service { private final String TAG="MyService"; public MyService() { // super(); } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. // throw new UnsupportedOperationException("Not yet implemented"); return null; } public int onStartCommand(Intent intent, int flags, int startId) { // Log.i(TAG, "onStartCommand()"); return START_STICKY; } public void onDestroy() { // backgroundHandler.exit(); } public void onCreate(){ Log.i(TAG,"onCreate method."); //mbus初始化 mBus=new BusAttachment(getPackageName(),BusAttachment.RemoteMessage.Receive); startBusThread(); if(backgroundHandler!=null) backgroundHandler.connect(); else return; } private void startBusThread(){ HandlerThread handlerThread=new HandlerThread("My HandlerThread"); handlerThread.start(); Looper loop=handlerThread.getLooper(); backgroundHandler=new BackgroundHandler(loop); Log.i(TAG,"startBusThread method."); } //請求都線上程中執行 private BackgroundHandler backgroundHandler=null; private final int CONNECT=2; //私有內部不可變類 private final class BackgroundHandler extends Handler{ public BackgroundHandler(Looper looper){ super(looper); } public void connect(){ Log.i(TAG,"backgroundHandler.connect()"); Message msg=backgroundHandler.obtainMessage(CONNECT);//相當於message.what=2; backgroundHandler.sendMessage(msg); } public void handleMessage(Message msg){ switch(msg.what){ case CONNECT: doConnect(); break; default: break; } } } //建立匯流排附件物件,getPackageName()出現NullPointerException異常,先於建構函式執行,此時物件為null,所以放到oncreate裡邊去 // private BusAttachment mBus=new BusAttachment(getPackageName(),BusAttachment.RemoteMessage.Receive); private BusAttachment mBus=null; //建立匯流排物件 private MyBusObject myBusObject=new MyBusObject(); //匯流排物件類,實現匯流排介面和匯流排物件介面 class MyBusObject implements MyInterface,BusObject{ // public void show(String args){ // Toast.makeText(getApplicationContext(),args,Toast.LENGTH_SHORT).show(); //會呼叫的遠端方法 // // } // // public int add(int a,int b){ //會呼叫的遠端方法 // return a+b; // } public String cat(String a,String b){ a=a.replace('H','T'); b=b.replace('W','B'); return a+b; } } //session的埠號 private static final short CONTACT_PORT=42; //匯流排物件,匯流排附件等連線到總線上的實現函式,建立的是service private void doConnect(){ org.alljoyn.bus.alljoyn.DaemonInit.PrepareDaemon(getApplicationContext()); //啟動守護程序 Status status=mBus.registerBusObject(myBusObject,"/myBusObject"); //註冊匯流排物件 if (Status.OK != status) { System.out.println("BusAttachment.registerBusObject() failed: " + status); System.exit(0); return; } //匯流排附件連線到總線上 status=mBus.connect(); if (status != Status.OK) { Log.i(TAG,"BusAttachment connect to bus failed."); System.exit(0); return; } //通訊的session port 設定 Mutable.ShortValue contactPort = new Mutable.ShortValue(CONTACT_PORT); SessionOpts sessionOpts = new SessionOpts(); sessionOpts.traffic = SessionOpts.TRAFFIC_MESSAGES; sessionOpts.isMultipoint = false; sessionOpts.proximity = SessionOpts.PROXIMITY_ANY; sessionOpts.transports = SessionOpts.TRANSPORT_ANY; //繫結通訊的session port status=mBus.bindSessionPort(contactPort,sessionOpts,new SessionPortListener(){ @Override public boolean acceptSessionJoiner(short sessionPort, String joiner, SessionOpts sessionOpts){ if (sessionPort == CONTACT_PORT) { return true; } else { return false; } } }); if (status != Status.OK) { Log.i(TAG,"bind certain session port failed."); System.exit(0); return; } //向匯流排請求一個名稱 int flags = 0; //do not use any request name flags status = mBus.requestName("com.test.well.known.name", flags); if (status != Status.OK) { Log.i(TAG,"request name from bus failed."); System.exit(0); return; } //在總線上宣告name的存在 status = mBus.advertiseName("com.test.well.known.name", SessionOpts.TRANSPORT_ANY); if (status != Status.OK) { Log.i(TAG,"advertise name on bus failed."); mBus.releaseName("com.test.well.know.name"); System.exit(0); return; }else Toast.makeText(getApplicationContext(),"advertise name=com.test.well.known.name",Toast.LENGTH_SHORT).show(); } static{ System.loadLibrary("alljoyn_java"); } }
相關推薦
AllJoyn+Android開發案例-android跨裝置呼叫方法
package com.example.siemens.testgetmethod; import android.app.Service; import android.content.Intent; import android.net.wifi.WifiConfiguration; import an
Android開發 - 獲取Android裝置的唯一標識碼(Android 6.0或更高)
在我們的APP開發中,通常需要獲取到裝置的唯一標識。在Android6.0之前,有很多方法我們可以方便獲取到硬體的唯一標識,但是在Android6.0之後,Android系統大幅限制了我們獲取裝置的硬體資訊。 Android6.0之前的方法(已過時) DEVICE_ID通getSyste
Android開發中在JAVA中呼叫C/C++ native程式碼
Android 從Java呼叫C/C++ 當無法用 Java 語言編寫整個應用程式時,JNI 允許您呼叫C/C++本機程式碼。在下列典型情況下,您可能決定使用本機程式碼: 希望用更低階、更快的程式語言C/C++去實現對時間有嚴格要求的程式碼。
Android開發案例:Android中幾種影象特效處理
· · Android中有很多圖片特效處理技巧,比如圓角、倒影,今天為大家分享一個例項,本例主要是先獲取桌布(getWallpaper()),然後對當前桌布的一些特效處理。 第一步:新建一個Android工程命名為ImageDemo,工程
Android開發: 在Android虛擬裝置中使用SDCard及問題分析
一.為Android虛擬裝置新增SDCard 1.開啟AVDM,選擇要一個虛擬裝置 2.選擇Edit,編輯一個AVD,在SD Card欄中,Size中輸入SDCard的大小100(或者file中選擇一個sdcard的img檔案),點選Edit AVD關閉視窗,這樣就可以在
Android開發中如何實現裝置與賬號繫結
最近在二建培訓機構大立教育的網課App上面看到這種情形,他們在做使用者驗證的時候還做了賬號密碼與裝置繫結的操作。一時好奇在網上查詢實現原理,看到了其中的實現發方式的一種可行方式。首先與伺服器商量好一個欄位用於存放裝置的唯一標識,在登入的時候獲取裝置唯一標識,我採用的是MAC地
android studio使用Aidl跨程序呼叫服務
以前就知道其大概程式碼流程,但是一直沒有敲程式碼去實現,今天將其實現了,android studio下編寫也遇到了一些小細節的問題,特此記錄一下。 既然是模擬Aidl通訊,那麼當然要編寫兩個應用了,一個提供服務給另一個應用呼叫,那麼開始吧。 一、服務提供方應
【Android開發】Android跨程序通訊(AIDL)官方文件及官方Demo講解
第一章、 關於Android跨程序的思考 先來回顧一下作業系統中的一些概念。 同一個程序中可以有多個執行緒,執行緒間通訊可以直接取得地址。因為Java程式的記憶體分配在連續的地址空間。 預設一個Java程式會開啟一個程序,執行在JVM中。但
Android開發案例:SQLite資料庫和ListView列表結合
SQLite是Android系統內建的輕量級的關係型資料庫,執行速度非常快;ListView是Android中最常用的的控制元件之一,幾乎所有的應用程式都會用到它。本文通過一個例項介紹如何通過ListView列表展示資料以及實現SQLite資料庫的增刪改查,
android開發中通過aidl實現遠端方法呼叫
在安卓開發過程中我們可能見過這樣的問題,就是在一個應用中呼叫另一個應用中的服務,並呼叫該服務中的方法。 我們可能對呼叫服務並不陌生,可是要執行服務中的方法,卻不能直接呼叫。因為兩個服務和呼叫它的程式屬
Android開發:解決三星裝置拍照後獲取的圖片被旋轉的問題
呼叫Android系統拍照功能後,三星手機拍攝後的照片被旋轉了90度,橫著拍變成豎的,豎著拍變成橫的。。。測試其它品牌的手機是正常的,就三星出現這個問題。 解決方法: 1、首先在呼叫拍照方法時,儲存拍照後的相片原圖,得到原圖路徑,(PhotoBitmapUtils是我
Android開發——藍芽多裝置連線(四)
前言 經過一個多月的時間藍芽多裝置連線的重構終於告一段落了,這次的重構不止是程式碼方面的完善,還結合了一些使用者的使用場景,另外增加一些離線操作,使手機端對藍芽的操作更加的便捷,對藍芽裝置的管理更加統一。 場景分析 支援的場景 多裝置連線(一個
Android開發 - 獲取Android設備的唯一標識碼(Android 6.0或更高)
申請 安全 地址 vat util new 應該 ret ati 在我們的APP開發中,通常需要獲取到設備的唯一標識。在Android6.0之前,有很多方法我們可以方便獲取到硬件的唯一標識,但是在Android6.0之後,Android系統大幅限制了我們獲取設備的硬件信息。
Android開發之Android studio 3.2.1配置androidannotations
androidannotations,Butterknife 元件等大大的提高了開發效率,但在配置androidannotations 的時候卻出現了問題,根據根據網上的資料配置 annotationProcessor “org.androidannotations:androidannot
Android開發:Android自定義View
本文為博主- 山水相逢-z 原創文章,地址: https://blog.csdn.net/weixin_38251977/article/details/82286127 上週遇到一個需求,用一個圓形進度條的形式來展示某項操作所佔的比例,雖然類似的輪子已經有很多了,但是
Android開發-在Android應用裡整合友盟訊息推送SDK的實現(相容小米、華為、魅族機型離線推送)
前 言 最近由於專案的功能需求的需要,需要在Android應用整合訊息推送的功能,而目前市面上的第三方訊息推送除了友盟推送外,還有極光推送、小米推送、個推以及信鴿(騰訊)推送等。當時本人對比各大第三方的訊息推送進行了測試,覺得友盟訊息推送整合簡單,推送訊息的
Android開發(Android Studio開發環境)“R”全部變紅的可能原因之一
一般在建立layout資源時,對layout命名時,名稱中存在大寫字母時,一般不會通過。但在修改layout檔名稱時,卻不會檢查這個要求,若存在大寫字母時,程式在編譯時,R會全部變紅,這時可以檢視編譯錯
Android開發(Android Studio)——環境
原始碼左側標籤,從上到下:Project、Structure、Captures、Favorites。 Project標籤,表示該專案的目錄結構。 Structure標籤,表示該程式碼的內部方法結構。 手動重新編譯: Build→Make Project,編譯整個專
Android開發之 Android-Studio 開發環境配置
今天給大家帶來一篇Android開發的文章,這也正是督促我自己學習安卓開發的一個方式,本文作為開篇文章,就很簡單的給大家演示下Android-Studio開發環境的配置步驟;目前大家在安卓開發上用的最多的可能就是Android-Studio了,在我讀大學的時候聽
【Android開發】Android 刪除指定檔案和資料夾
/** * 刪除單個檔案 * @param filePath 被刪除檔案的檔名 * @return 檔案刪除成功返回true,否則返回false */ public boolean deleteFile(String filePath) {