Я хотел бы выполнить свой код немного по-другому при работе эмулятора, работая на устройстве. (Например, с помощью 10.0.2.2 вместо общедоступного URL для выполнения против сервера разработки автоматически.), Что состоит в том, чтобы обнаружить лучший способ, когда приложение Android работает в эмуляторе?
Не знаю, есть ли более эффективные способы обнаружения эму, но эмулятор будет иметь файл init.goldfish.rc
в корневом каталоге.
Это сценарий запуска, специфичный для эмулятора, и его не должно быть в сборке без эмулятора.
Другой вариант - посмотреть на свойство ro.hardware и посмотреть, установлено ли для него значение goldfish. К сожалению, кажется, нет простого способа сделать это из Java, но тривиально из C, используя property_get () .
вы можете проверить IMEI #, http://developer.android.com/reference/android/telephony/TelephonyManager.html#getDeviceId%28%29
, если я помню, эмулятор возвращает 0. Однако я не могу найти никакой документации, которая бы это гарантировала. хотя эмулятор не всегда может возвращать 0, кажется довольно безопасным, что зарегистрированный телефон не вернет 0. что произойдет на устройстве Android, не являющемся телефоном, или на устройстве без установленной SIM-карты, или на устройстве, которое в настоящее время не зарегистрировано на сеть?
кажется, что это было бы плохой идеей, полагаться на это.
это также означает, что вам нужно будет запросить разрешение на чтение состояния телефона, что плохо, если вам это еще не требуется для чего-то другого.
если не так, то всегда нужно кое-что перевернуть, прежде чем вы наконец сгенерируете свое подписанное приложение.
Ну, Android id у меня не работает, сейчас я использую:
"google_sdk".equals( Build.PRODUCT );
Предложенное выше решение для проверки 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);
}
}