android開機啟動Service(小發現)

2021-07-05 19:00:35 字數 1932 閱讀 7107

最近在做乙個關於android系統上的監控程式,開機啟動,開機啟動**是網上找的,也就是註冊乙個廣播和activity,然後用activity啟動service就可以了,但是我想讓這個程式沒有介面,而且在桌面沒有圖示顯示,然後我想當然的用service來代替開機啟動activity,然後就出現了很詭異的事情:因為我第一次是用activity喚醒的service,發現啟動的相當順利,然後我把activity直接注釋掉,用eclipse的run as重新運安裝,改用廣播喚醒sevice,開機之後service程式也能順利的執行,但是如果先解除安裝android程式再安裝注釋了activity的程式的話,service是不會被廣播啟動的,在網上找了答案,原因是android系統版本的原因,說android4.0之後廣播機制改了,從來沒有執行過的android程式是不能接收任何廣播的。這句話我沒法在4.0之前的手機上驗證,但是我已經確定我的androd4.0.3版本如果沒有執行過的話,是不會收到開機廣播的。

問題:android4.0.3版本上執行開機啟動sevice程式,不能啟動。

解決思路:

讓程式啟動一次,然後就可以接受開機廣播了。

解決辦法:

因為這個是乙個無桌面圖示的程式。所以讓它啟動的時候會無法發現他已經安裝到裝置上了。可以在「設定」->"應用"看到應用已經安裝上了。也可以在日誌裡檢視,因為它和有activity的程式啟動是不一樣的。我採用的是無線adb除錯。

有activity時console安裝列印資訊如下

[2015-10-12 17:05:03 - monitor] android launch!

[2015-10-12 17:05:03 - monitor] adb is running normally.

[2015-10-12 17:05:03 - monitor] performing net.langwei.monitor.monitor activity launch

[2015-10-12 17:05:03 - monitor] automatic target mode: using device '192.168.18.132:5555'

[2015-10-12 17:05:03 - monitor] uploading monitor.apk onto device '192.168.18.132:5555'

[2015-10-12 17:05:03 - monitor] installing monitor.apk...

[2015-10-12 17:05:05 - monitor] success!

[2015-10-12 17:05:05 - monitor] starting activity ***.******x.monitor.monitor on device 192.168.18.132:5555

[2015-10-12 17:05:06 - monitor] activitymanager: starting: intent

無activity時console安裝列印資訊如下

1、這個方法是偶然發現的,也就是讓activity先啟動一次service,然後在androidmanifest.xml檔案中注釋掉activity,然後在run as重新安裝一遍。這樣就可以接收開機廣播了。可能eclipse的run as功能是將原來的版本替換,並不是解除安裝之後安裝。

2、採用am命令啟動一次service,這樣就可以不用寫activity啟動service再注釋掉activity了。具體用法am startservice -n ***.******x.******x/.monitorservice。***.******x.******x是包名,採用am啟動service的時候可能會出現error: requires permission not exported from uid 10080這種資訊,這時候你就需要在你的androidmanifest.xml標籤中增加乙個android:exported="true"可以被別的程序訪問。或者你自己公升級到root許可權也可以am啟動service。

Android開機啟動

android 手機在啟動的過程中會觸發乙個standard broadcast action,名字叫 android.intent.action.boot completed 只會觸發一次 在這裡我們可以通過構建乙個廣播接收者來接收這個這個action.下面我就來簡單寫以下實現的步驟 第一步 在a...

android開機啟動activity

1,原理 第一步 首先要有乙個用於開機啟動的activity或者service,這裡以系統自己建立的最簡單的activity為例進行講解。package com.billhoo.study import android.os.bundle public class boottestactivity ...

android開機啟動服務

這是個很簡單的過程,這個不像pc機得開機啟動,要有精確的記憶體位址,這裡所謂的簡單是跟pc機得開機啟動相比。android系統的宗旨說的是,不要來找我,我會來找你。activity好像是應用程式的眼睛,用眼神與使用者交流而使用者則用手指頭告訴activity我想要什麼。broadcastreceiv...