6

私は、Android でロケーション モッキングの可能性を利用するアプリを作成しています。

私が達成したいのは、開発者オプションで「モックの場所を許可する」フラグを設定せずに自分の場所をモックすることです。

このアプリで動作するため、可能であることはわかっています: https://play.google.com/store/apps/details?id=com.lexa.fakegps&hl=en

私が試したこと:

apk を生成し、/system/app に移動し、再起動し
ます。また、マニフェストで ACCESS_MOCK_LOCATION 権限の有無にかかわらず試してみました。

しかし、それはすべてこの例外につながります:
RuntimeException: Unable to start Activity: SecurityException: Requires ACCESS_MOCK_LOCATION secure setting

4

3 に答える 3

14

問題で言及したものを逆コンパイルcom.lexa.fakegpsしました。これは次のように機能します。

private int setMockLocationSettings() {
    int value = 1;
    try {
        value = Settings.Secure.getInt(getContentResolver(),
                Settings.Secure.ALLOW_MOCK_LOCATION);
        Settings.Secure.putInt(getContentResolver(),
                Settings.Secure.ALLOW_MOCK_LOCATION, 1);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return value;
}

private void restoreMockLocationSettings(int restore_value) {
    try {
        Settings.Secure.putInt(getContentResolver(),
                Settings.Secure.ALLOW_MOCK_LOCATION, restore_value);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/* every time you mock location, you should use these code */
int value = setMockLocationSettings();//toggle ALLOW_MOCK_LOCATION on
try {
    mLocationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, fake_location);
} catch (SecurityException e) {
    e.printStackTrace();
} finally {
    restoreMockLocationSettings(value);//toggle ALLOW_MOCK_LOCATION off
}

これらのコードの実行時間は非常に短いため、他のアプリは ALLOW_MOCK_LOCATION の変更をほとんど検出できません。

また、
1.デバイスへのルートアクセスが必要です
2.アプリを/system/appまたはに移動します/system/priv-app

私は自分のプロジェクトで試してみましたが、うまくいきます。

于 2014-09-15T13:46:27.707 に答える
2

これを試してくださいhttp://repo.xposed.info/module/com.brandonnalls.mockmocklocations

一部のアプリでは、位置情報をモックしていなくても、[位置情報のモックを許可する] がオンになっていると使用できません。これにより、「モックの場所を許可する」がオンになっていることをアプリが検出するのを防ぐことができます。

于 2015-06-02T11:30:52.370 に答える
2

これを行うには、デバイスへのルート アクセスが必要です。

于 2014-03-12T21:01:08.217 に答える