2013-01-18 208 views
7

我還沒有做過廣泛的測試,但是有證據表明,應用程序Manifest中的android.permission.ACCESS_MOCK_LOCATION不會像人們假設的那樣工作(即,如果存在 - 允許模擬位置提供程序,否則不允許)。所以假GPS應用如https://play.google.com/store/apps/details?id=com.lexa.fakegps可以與任何應用程序一起工作,無論是否設置了ACCESS_MOCK_LOCATION。如果用戶允許在設備設置中僞造位置,這似乎就足夠了。權限ACCESS_MOCK_LOCATION被忽略?

也許ACCESS_MOCK_LOCATION真的意味着應用程序本身可以模擬位置提供程序嗎?如果是這樣,那麼它應該更像WRITE_MOCK_LOCATION,而不是像名字所示那樣訪問(讀取)。聽起來更像是bug而不是功能。如果這是真的,那麼沒有辦法真正確保GPS位置是真實的,而不是假的?

+0

請檢查我的答案。 – PageNotFound

+0

謝謝,但你並沒有真正回答我的問題。我擔心的是,某些第三方應用程序可能會在非根源設備上輕鬆僞造GPS位置,而我的使用GPS的應用程序無法保證安全。我的應用程序是安全應用程序,如果有任何最終用戶可以僞造任何GPS位置,則該應用程序的用處會大大減少有沒有辦法解決它? – JaakL

回答

1

因爲沒有人真正回答你的問題,我會提供一個答案:

也許ACCESS_MOCK_LOCATION真的意味着應用程序可以是 本身模擬位置提供商?

是的。該權限允許應用程序「訪問」「模擬位置」開發人員功能。這使得開發人員可以創建模擬位置,這些位置似乎是真實的,以便開發/測試具有基於位置功能的應用程序,而無需實際移動或更改設備的實際移動或改變(例如,硬連線假GPS)。

因爲Google不知道你想要測試什麼應用程序,或者你想如何提供假數據,所以它做到了這一點。作爲開發者功能,它減少了這個功能暴露給普通人羣。

+0

謝謝,明確的答案。所以這只是令人困惑的權限名稱。你是否知道我的問題的其他部分 - 我的應用程序如何確保它始終使用真實的而不是某個模擬位置? – JaakL

2

首先需要搞開發模式,這在安卓4.2.1通過將Settings做 - >About Tablet(接近底部,可能要求手機類似的東西),並在底部,七次挖掘Build number。一旦開始點擊,就會出現倒計時,向您展示成爲開發人員需要多少時間。

點擊後退按鈕返回到Settings,現在你會發現一個Developer options項目你在關於上面菜單 - 單擊它,並選中Allow mock locationsDEBUGGING下。您的設備現在應該正確尊重ACCESS_MOCK_LOCATION。 (如果你這樣做的動機是欺騙Ingress相信你在門戶網站附近,那麼你運氣不好 - 當然,任何應用程序都能夠檢測到這個設置已被使用,並告訴你禁用它,所以你可以充其量使用它來補充你的XM供應。:-)

+1

-1,因爲這不是答案,PageNotFound有有效答案。 –

3

http://developer.android.com/reference/android/Manifest.permission.html,它說Allows an application to create mock location providers for testing,所以我認爲你認爲是正確的。

實際上,com.lexa.fakegps只有具有root權限才能模擬位置,而不需要ACCESS_MOCK_LOCATION。此外,即使它具有root權限,它也需要將Allow mock locations切換到模擬位置。所以,我認爲權限是針對不適用於系統應用的普通應用。在AndroidManifest.xml中,系統應用程序擁有更多權限來執行沒有聲明權限的操作。

1

禁用MockLocation皮棉檢查對於特定的權限,即

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"> 
    <uses-permission 
     android:name="android.permission.ACCESS_MOCK_LOCATION" 
     tools:ignore="MockLocation" /> 
</manifest>