|
Pers.narod.ru. Тексты. Java2ME. Можно ли в Java2 ME определить IMEI телефона |
Ответ на вопрос, который, в общем, остаётся распространённым. Краткий - нельзя, подробнее ниже :)
В общем виде этого сделать нельзя просто потому, что Java работает отдельно от железа телефона, это виртуальная машина.
Используя стандартные API профилей MIDP такую информацию получить невозможно.
Однако, некоторые производители телефонов в своих реализациях ява-машины добавляют свойство, содержащее IMEI.
Обычно его можно получить с помощью System.getProperty("название").
"Название" зависит от конкретного производителя, к примеру, попадается следующее:
Nokia
System.getProperty("phone.imei");
System.getProperty("com.nokia.IMEI");
Мидлет должен быть подписан, если это не серия S60.
Sony-Ericsson
System.getProperty("com.sonyericsson.imei");
На некоторых моделях не работает, просто возвращает null.
Motorola
System.getProperty("IMEI");
System.getProperty("com.motorola.IMEI");
Или то, или то
Samsung
System.getProperty("com.samsung.imei");
редко где работает.
Siemens
System.getProperty("com.siemens.imei");
Поэтому все "противоугонные" и т.п. мидлеты всегда не кроссплатформенны, а "заточены" под модель или производителя.
Так что, приходится писать платформенно зависимое приложение. Единственное, что можно придумать - попробовать перебрать в цикле распространённые варианты названия свойства IMEI, сравнивая вывод с null, что-то типа
do {
String My_IMEI = System.getProperty("очередной код из набора");
if (My_IMEI != null) {
//Ура, мы его нашли
break;
}
} while (не кончились варианты);
Сразу же не советую использовать IMEI для защиты приложения или определения уникальности копии мидлета.
1. Часто сам IMEI недостоверен/неуникален, особенно у "китайцев".
2. Такая защита легко ломается.
Более-менее надёжным подходом к защите мобильных приложений можно считать лишь хранение каких-либо жизненно важных "частей" мидлета (кусков кода, исходных данных, паролей) на сервере. Платой за это станет необходимость подписывать мидлет (или юзеру каждый раз соглашаться с отправкой данных в сеть). Ну и плюс мобильный интернет-траффик у нас пока не бесплатный :)
Как узнать, поддерживает ли какие-либо расширенные свойства класса System Ваш телефон?
Облегчить жизнь может мидлет Getproperties, специально предназначенный для получения системных свойств, имена которых введены пользователем. Если ничего нет, значение свойства будет null.
|
|