获取没有应用程序上下文的IMEI和电话号码

时间:2015-06-09 16:51:02

标签: android telephonymanager

我一直在搜索,发现this post可用于获取设备的电话号码。在我的主服务文件中,我有一个公共静态变量,设置为使用上述帖子中的方法找到的电话号码。

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;

如果有办法在不使用TelephonyManager的情况下获取电话号码和IMEI,或者更具体地说不需要应用程序上下文,我就不必担心这个问题。如果这是不可能的,也许有一个使用公共静态变量的解决方法?

感谢所有帮助

1 个答案:

答案 0 :(得分:2)

没有上下文的情况下,没有办法获取没有上下文的语音,因为上下文是您进入用户电话的网关。它使您可以访问存储,位置,显示,几乎一切。

如果你经常使用phonenumber,我认为你应该在mainActivity中为它做一个吸气剂,那就是你从中获取它的地方。在mainActivity onCreate()方法初始化

private String phoneNumber;

作为电话号码,并在您的mainActivity中制作

public String getPhoneNumber()

要从您的服务访问它,您可以在应用的其他部分调用

((MainActivityNameHere) getApplicationContext()).getPhoneNumber()

除非您使用静态方法。您仍然需要访问MainActivity。我通常在mainActivity中执行此操作:

private static MainActivity context;
public void onCreate() {
    context = this;
}

public static getContext() { return context; }

希望语法正确,尝试将上述内容合并到mainActivity并使用

从服务中调用它
MainActivity.getContext().getPhoneNumber()