2012-09-27 28 views

回答

7

您應該能夠運行在Java代碼中的命令:

Runtime.getRuntime().exec("screencap -p /sdcard/screen.png"); 

有一些shell命令,你可以無需根用戶身份執行。所以你不需要運行「su」。我不確定你是否可以執行screencap。當然,您需要獲得在您的應用中寫入SD_CARD的權限。

android.permission.WRITE_EXTERNAL_STORAGE 

但是爲什麼你不使用Android API來製作截圖?欲瞭解更多信息,請閱讀這篇文章的計算器:How to programmatically take a screenshot in Android?

Androids安全模型基於用戶id,就像Linux一樣。每個應用都有自己的用戶ID。所以你的應用程序有一個像1001這樣的用戶標識。如果你的用戶被允許運行你的命令,否則你會收到一個錯誤。

編輯:
你需要root用戶截屏或成爲系統應用程序。有權限READ_FRAME_BUFFER,但只有當您是系統應用程序時纔可以獲得該權限。當應用可以截取設備的屏幕截圖時,它是一個安全問題。

我發現這個API http://code.google.com/p/android-screenshot-library/它承諾不帶根目錄的截圖。我沒有測試它。圖書館啓動一個本地服務,然後爲您截取屏幕截圖。 但是您必須在每次手機啓動時運行該服務。所以它獲得了系統權限。這不是很舒服......

結論:採取屏幕快照,無需從代碼根本沒有很好的辦法......

+0

AFAIK,沒有API來捕捉截圖。所以,我嘗試通過shell命令執行screencap。但是我無法在沒有root權限的情況下執行它。 –

+0

似乎是這樣。沒有API,你需要root來運行screencap。 我發現這個庫http://code.google.com/p/android-screenshot-library/與此,你應該能夠沒有根用戶截圖。它安裝一個本地服務,通過adb shell啓動。所以它有能力截圖。 – mcia

+0

我曾嘗試過。它不適用於android 3.x和android 4.x,因爲framebuffer在那裏被破壞了。現在可以接受的方式是通過shell命令調用screencap(在root權限下) –

2

Is there any way to run android system app without root permission?

它必須NO,但有些時候,一些功能,這不可公開使用可用。我見過使用java反射的例子。我想,不。

的事情是亞行外殼用戶應用有基於用戶和不同的安全級別組ID(UID和GID)。

更多信息:http://android-dls.com/wiki/index.php?title=Android_UIDs_and_GIDs

此外,還有通過應用權限隱伏&內部類,程序,等它內部使用作出限制。

產品號:關於截圖。在Android市場(谷歌播放)有幾個應用程序提供沒有ROOT訪問的屏幕截圖。所以,這是可能的。 儘管Android 4.0的屏幕截圖可以從「框中」獲得。

+0

請注意詳細說明哪些應用可以做到這一點?我們可以反編譯它們並找出它是如何工作的。 –

相關問題