2013-01-18 4 views
7

Я не проводил обширных испытаний, но есть доказательства того, что этот файл 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, а не на доступ (чтение), как предложило бы название. Звучит скорее как ошибка, чем функция. Если это так, то нет никакого способа гарантировать, что местоположение GPS является реальным, а не поддельным?

+0

Пожалуйста, проверьте мой ответ. – PageNotFound

+0

Спасибо, но вы на самом деле не отвечаете на мой вопрос.Меня беспокоит то, что некоторые сторонние приложения могут легко помещать GPS-координаты на устройства без привязки, и мое приложение, которое потребляет GPS, не может быть в безопасности. Мое приложение - это приложение для обеспечения безопасности, которое гораздо менее полезно, если любой пользователь может подделать любое местоположение GPS с этим. Есть ли способ обойти это? – JaakL

ответ

1

Поскольку ни один фактически не ответил на ваш вопрос, я буду дать ответ:

Может ACCESS_MOCK_LOCATION на самом деле означает, что приложение может быть сам макет провайдера?

Да. Разрешение позволяет приложению «получить доступ» к функции разработчика «mock location». Это позволяет разработчику создавать макетные местоположения, которые кажутся реальными, для разработки/тестирования приложений с функциями определения местоположения без фактического физического перемещения или изменения (например, жесткой проводки поддельного GPS) устройства.

Поскольку Google не знает, какое приложение вы хотите протестировать или как вы хотите предоставить фальшивые данные, он сделал это. Как функция разработчика, это уменьшает воздействие этой функции на общее население.

+0

Спасибо, ясный ответ. Так что это просто путаное имя разрешения. Знаете ли вы другую часть моего вопроса - как мое приложение может гарантировать, что оно использует всегда реальное и никогда не какое-то ложное местоположение? – JaakL

2

Сначала необходимо включить режим разработчика, который в Android 4.2.1 можно сделать, перейдя в Settings ->About Tablet (вблизи дна, вероятно, под названием что-то подобное для телефонов) и нажмите Build number в нижней части, в семь раз. Когда вы начнете прослушивать, появится обратный отсчет, чтобы показать вам, сколько еще потребуется для того, чтобы стать разработчиком.

Нажмите кнопку назад, чтобы вернуться к Settings, и теперь вы можете найти Developer options пункт выше О меню вы были - нажмите на нее, и проверьте Allow mock locations под DEBUGGING. Теперь ваше устройство должно должным образом уважать 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 может определять местоположение без ACCESS_MOCK_LOCATION только в том случае, если он имеет привилегии root. Кроме того, ему нужно переключить Allow mock locations на то, чтобы определить местоположение, даже если оно имеет привилегии root. Итак, я думаю, что разрешение для обычных приложений не для системных приложений. Системные приложения имеют больше привилегий, чтобы делать что-либо, не объявляя разрешения в 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> 
Смежные вопросы