Как я могу обнаружить, когда приложение Android работает в эмуляторе?

Я хотел бы выполнить свой код немного по-другому при работе эмулятора, работая на устройстве. (Например, с помощью 10.0.2.2 вместо общедоступного URL для выполнения против сервера разработки автоматически.), Что состоит в том, чтобы обнаружить лучший способ, когда приложение Android работает в эмуляторе?

291
задан Nikhil 9 July 2012 в 00:52
поделиться

5 ответов

Не знаю, есть ли более эффективные способы обнаружения эму, но эмулятор будет иметь файл init.goldfish.rc в корневом каталоге.

Это сценарий запуска, специфичный для эмулятора, и его не должно быть в сборке без эмулятора.

7
ответ дан 23 November 2019 в 01:42
поделиться

Другой вариант - посмотреть на свойство ro.hardware и посмотреть, установлено ли для него значение goldfish. К сожалению, кажется, нет простого способа сделать это из Java, но тривиально из C, используя property_get () .

5
ответ дан 23 November 2019 в 01:42
поделиться

вы можете проверить IMEI #, http://developer.android.com/reference/android/telephony/TelephonyManager.html#getDeviceId%28%29

, если я помню, эмулятор возвращает 0. Однако я не могу найти никакой документации, которая бы это гарантировала. хотя эмулятор не всегда может возвращать 0, кажется довольно безопасным, что зарегистрированный телефон не вернет 0. что произойдет на устройстве Android, не являющемся телефоном, или на устройстве без установленной SIM-карты, или на устройстве, которое в настоящее время не зарегистрировано на сеть?

кажется, что это было бы плохой идеей, полагаться на это.

это также означает, что вам нужно будет запросить разрешение на чтение состояния телефона, что плохо, если вам это еще не требуется для чего-то другого.

если не так, то всегда нужно кое-что перевернуть, прежде чем вы наконец сгенерируете свое подписанное приложение.

4
ответ дан 23 November 2019 в 01:42
поделиться

Ну, Android id у меня не работает, сейчас я использую:

"google_sdk".equals( Build.PRODUCT );
64
ответ дан 23 November 2019 в 01:42
поделиться

Предложенное выше решение для проверки ANDROID_ID работало у меня, пока я не обновился сегодня до последних инструментов SDK, выпущенных с Android 2.2.

Поэтому в настоящее время я переключился на следующее решение, которое пока работает с тем недостатком, что вам необходимо предоставить разрешение на чтение PHONE_STATE ( )

private void checkForDebugMode() {
    ISDEBUGMODE = false; //(Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID) == null);

    TelephonyManager man = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
    if(man != null){
        String devId = man.getDeviceSoftwareVersion();
        ISDEBUGMODE = (devId == null);
    }
} 
5
ответ дан 23 November 2019 в 01:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: