2017-06-26 40 views
1

我正在嘗試使用服務(始終運行)。這個服務還有一些C/C++ JNI代碼來訪問(獲取信息)平臺上的其他幾個組件,並且還需要訪問HAL。我們還需要存儲數據(某種存儲數據庫,文件等)。我們有其他一些應用程序需要訪問此服務中的這些數據。以符號的方式,這裏是我的目標在Android平臺中添加服務

Android應用程序 - >系統服務 - > JNI(native)庫 - > HAL/DeviceDriver。

我的問題:=

  1. 我們能做到這一點作爲一個普通的Android服務(道路上的一切 下載的應用程序/服務的書面),或者必須包含在 系統服務?
  2. 我如何確保我的服務始終處於活動狀態,並在啓動或平臺上啓動?
  3. 如果必須在系統服務中如何做到這一點?可下載的應用程序可以訪問此係統服務嗎

克里希納

回答

1

1 - 如果你只需要接取該服務生成的數據,你可以做你的服務作爲Android的服務

2 - 你需要註冊一個BOOT_RECEIVER廣播在maifest,然後在廣播的的onReceive,你開始你的服務,這樣的事情:

清單:

 <receiver 
     android:name="YOUR.PACKAGE.BootBroadcast" 
     android:enabled="true" 
     android:exported="true"> 
     <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

BootBroadcast:

public class BootBroadcast extends BroadcastReceiver { 


    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { 
      // start your service 

     } 
    } 


} 

3 - 不要知道答案

+0

喜羅德里戈欣賞你的反應。是的我想要這項服務的數據,但1)該服務需要訪問HAL和其他Android組件。 2)它應該一直活着。 3)沒有人應該能夠卸載它。 –

+0

1)服務行爲與Activity行爲類似,如果你可以在某些Activity中做你的東西(比如訪問HAL和其他android組件),你可以在服務中做到這一點 2)只需實現這個(https:// stackoverflow.com/questions/9109372/android-background-service-that-runs-forever),您的服務將永遠運行! 3)如果你想沒有人卸載你的服務,你需要將你的應用程序作爲一個系統應用程序(只要做一點點搜索就可以了,如果你有root權限,這並不複雜) –

+0

如果幫助你,不要忘記upvote! –