2010-05-11 90 views
3

是否有可能以編程方式從運行在Dalvik虛擬機上的應用程序(服務)重新啓動手機?是否可以使用Android SDK或NDK重新啓動手機?

如果SDK不提供此功能,那麼使用NDK並調用內核提供的某些功能怎麼樣?我知道這個選項不是首選(不夠穩定的庫),但如果它是唯一的選擇,我也必須考慮這一點。

+0

出於好奇,什麼是編輯?我沒有看到任何(重大)修改。 – kaskelotti 2010-05-13 11:49:33

+0

他添加了android標籤。如果你點擊「編輯......前」鏈接,它會顯示你。 – David 2010-05-13 12:08:37

+0

謝謝。我正在尋找這個功能來展示不同之處。標籤很好:) – kaskelotti 2010-05-13 12:12:01

回答

3

希望不是。 :-)

如果可以隨意重新啓動手機,惡意應用程序可以隨機安靜地執行此操作,並使您的生活變得不快樂。

由於Android依靠進程邊界和Linux訪問權限來實現安全性,而不是Java語言沙箱,因此NDK不會爲您提供任何其他功能。

你爲什麼要這樣做?也許還有其他一些方法可以完成你的目標。

+0

感謝您的回覆。我幾乎需要重新啓動手機,或者這是確切的要求。我正在工作的應用程序用於測試手機上的應用程序。重新啓動意味着在測試完成後執行以釋放所有資源。另一種可能性是殺死一個特定的Dalvik VM,但我不知道這是否足以作爲發佈過程,並且比完整的重新啓動更容易實現。 – kaskelotti 2010-05-13 11:48:40

+0

進程可以很容易地殺死*自己*。如果你控制相關的應用程序,他們只需要接受一個「死」的消息,並調用System.exit()。只有具有相同的用戶ID才能殺死其他進程,而這些用戶ID只有在由同一開發人員構建和簽名時纔會生效。 – fadden 2010-05-13 14:44:25

+0

謝謝。你的意思是把這些「死亡」消息作爲Intents或其他一些高級手段發送出去,或者通過發送內核中的信號發送出去?用戶標識是什麼意思? shell上的'ps'命令爲啓動該進程的用戶提供了幫助。有更高級別的用戶ID嗎? – kaskelotti 2010-05-17 08:51:19

1

我在Linux中發現了正確的系統調用,可以做到這一點,並且在擺弄NDK/JNI路徑之後,我終於設法調用該函數。結果是我需要超級用戶的權限。我有點猜測,情況會是這樣。

有沒有辦法解決這個問題?除了電話,我仍然試圖避免。

仍然可以用adb重新啓動手機。我想這與ddmd或其他一些守護進程通信,所以有可能以某種方式使用相同的功能?

+0

什麼是系統調用? – Reno 2011-11-15 10:10:06

+0

我已經忘記了這整個話題。我認爲http://developer.android.com/reference/android/os/PowerManager.html#reboot%28java.lang.String%29更適合重新啓動設備。還沒有測試過它。對於系統調用,我無法完全記得,也許是sys_reboot。但請注意,我認爲我使用Android 1.6進行了測試,而且Android內核/ API已經發展得相當多,甚至可能會導致此類系統調用不再可用。 – kaskelotti 2011-11-15 12:07:21

+0

誠然,這些似乎都不能在GB或ICS上工作,如果我找到任何東西,我會發布答案。如果您還記得使用過的系統調用,請告訴我。謝謝。 – Reno 2011-11-15 12:14:53

3

powermanager.reboot是因爲API級別可供8 需要reboot permission

+0

+1很高興看到Androik SDK正在發展(並且該線程仍然在同一時間接收更新)。由於問題域不再相同,因此無法真正接受這是一個正確的答案。仍然收到投票作爲新設備的優秀更新,感謝分享。 – kaskelotti 2012-10-29 12:59:48

相關問題