Я искал и нашел this post полезный при получении номера телефона на моем устройстве. В моем основном файле службы у меня есть общедоступная статическая переменная, которая установлена на номер телефона, найденный с использованием метода в вышеупомянутом сообщении.Получение IMEI и номера телефона без контекста приложения
class MyService extends Service implements... {
//Phone number of the device
public static String phoneNumber;
public void onCreate() {
//Grab phone number of device
TelephonyManager tMgr = (TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
phoneNumber=mPhoneNumber;
}
}
Я ни в коем случае продвинутый разработчик программного обеспечения, но я знаю, что с использованием открытого статической переменной не является лучшим решением, так как оно может быть изменено вне класса. Этот открытый статический номер телефона обращается в другом классе, который отправляет его на сервер. И доступ к нему осуществляется следующим образом:
String devicePhoneNumber;
devicePhoneNumber = MyService.phoneNumber;
Я не придется беспокоиться об этой проблеме, если есть способ, чтобы получить номер телефона и IMEI без использования TelephonyManager, или более конкретно, без необходимости контекста приложения. Если это невозможно, возможно, существует обход для использования публичной статической переменной?
Спасибо за помощь
Тот факт, что вы используете 'MyService.phoneNumber(); 'подразумевает, что у вас есть метод getter. Так почему бы не сделать 'phoneNumber' частным, если он никогда не доступен непосредственно за пределами' MyService'? Кстати, наличие локальной переменной с именем 'mPhoneNumber' выглядит немного странно. Как правило, префикс 'm' используется (если вообще) для полей непубличного класса. – Michael
Короткий ответ - нет, вам нужен объект контекста. Я думаю, что вопрос, который вы должны задать, заключается в следующем: «Как мне получить объект Context, где мне нужно использовать IMEI/номер телефона?» –
@ Майкл Я хотел набрать MyService.phoneNumber; так как это поле. Я исправлю это в редактировании. –