2013-02-12 54 views
1

我需要在啓動時在Android中啓動服務我不使用廣播接收器,我在C++中編寫了服務,因爲我需要訪問驅動程序libusb圖層來與我的extrernal設備進行通信,工作正常,如果我開始manualy,如果我想在啓動時啓動服務意味着我需要在android中編輯inir.rc文件如果我這樣做它也工作良好。但問題是我不能編輯init.rc所有設備。我把我的服務系統正/ bin中的位置和編輯init.rc文件遵循在啓動時的Android C++服務

service sampleservice/system/bin/sampleservice 
       oneshot 
       disable 

爲manualy我從終端啓動的服務這樣

#./system/bin/sampleservice 

,但我不能啓動在每個服務而每次當系統重新啓動時做有什麼想法與出編輯在引導時啓動該服務init.rc

回答

1

據我所知(NDK參考,像谷歌,NDKAndroid的谷歌下發展組rs等),除了init.rc之外,沒有可靠的方式來啓動本地二進制作爲服務。

對於您的特定使用情況,您可能會給這裏描述的USB SDK:http://developer.android.com/guide/topics/connectivity/usb/index.html一試。但是,如果這還不夠,或者如果你想支持低於10的OS API級別,那麼我相信沒有簡單的方法來實現你想要的。

提供您的服務是不是關鍵(即系統不依賴於它),我見過一對夫婦的線程在這裏和上建議創建一個常規的Android應用程序,你會創建一個使用該組ADT。這將是最小的,並且包含:

當需要在無根設備上安裝服務時,也推薦使用此方法。但是,我從來沒有嘗試過。我知道這並不多,但我想分享我對這個主題的瞭解。

+0

感謝您的評論,還有一件事我可以開始從廣播接收器的本地服務? – 2013-02-12 11:32:51

+0

基本上 - 是的。你可以使用'Runtime.exec()'並運行整個過程。 *或者*您可以在庫中創建引導功能,這可能會啓動一個單獨的工作線程。那麼你會創建一個JNI方法來調用本地引導函數,並簡單地從接收方調用JNI方法。 – andr 2013-02-12 11:37:40

+0

我有一個疑問,我開始我的服務使用廣播接收器,所以它開始啓動,但我不能訪問我的外部設備,如果我開始我的服務在終端像./system/bin/myservice它的工作正常可能是因爲權限問題? – 2013-02-13 11:35:56

-1

我想你需要在啓動服務之前確保fs已啓動....如果你可以從源代碼編譯,一個好主意就是在init代碼本身中啓用Info日誌。

BR Subbu