如何获取ServiceState的实例?

时间:2010-06-26 10:38:24

标签: android

我正在尝试在ServiceState中获取Activity的实例。但是我该怎么做呢?没有静态方法可以在任何返回ServiceState实例的服务上获取实例或任何方法 有TelephonyManager.listen()电话。但是我希望在我想要的时候得到ServiceState实例,而不是因为某些东西发生变化而Android调用我的监听器。

ServiceState的文档可在此处找到:http://developer.android.com/reference/android/telephony/ServiceState.html

6 个答案:

答案 0 :(得分:6)

您希望从ServiceState获取哪些信息? 如果您只想获得当前注册的运营商,可以通过调用getNetworkOperatorName()中的方法TelephonyManager来完成此操作。 但是,如果您想获得手机的服务状态,则需要使用重写的PhoneStateListener方法实施onServiceStateChanged。然后做这个:

telephonyManager.listen(yourListener, PhoneStateListener.LISTEN_SERVICE_STATE);

当您拨打telephonyManager.listen时,会调用onServiceStateChanged方法,此时您将获得当前的电话服务状态。

答案 1 :(得分:3)

我还没有尝试过这个但是我不得不这样做,因为这种功能是我的应用程序的关键。我会告诉你它是怎么回事,但这就是我的想法:

从API(TelephonyManager的实例方法):

  

public void listen (PhoneStateListener listener, int events)

     

注册侦听器对象以接收指定电话状态更改的通知。

     

要注册侦听器,请传递PhoneStateListener并在events参数中指定至少一个感兴趣的电话状态。 在注册时,当指定的电话状态发生变化时,电话管理器会在侦听器对象上调用相应的回调方法并传递当前(udpated)值。

你可以只注册一个监听器并保留它,然后获得回调以在每次更改时保存Activity中的报告状态,这样你的应用程序每次需要检查时都可以引用Activity字段。或者你可以在每次想要状态测量时继续注册并抛弃听众,但我认为这会浪费更多的系统资源,而不仅仅是保持一个。

答案 2 :(得分:3)

我认为我真的不明白你的问题,因为据我所知,从API级别1开始,ServiceState上的一个空构造函数是公共的。因此,如果你想要它的一个实例,你所要做的就是:

ServiceState serviceState = new ServiceState();

修改 现在我了解你的情况,我唯一能想到的是,在你注册一个PhoneStateListener后,你将得到一个关于PhoneState的更新(它可能没有实际改变,但是一个事件被触发,让你知道我猜的当前值)。因此,我能想到的唯一解决方法是在您想要知道当前值时继续注册phoneStateListener,并在不再需要时取消注册它。

希望有所帮助

答案 3 :(得分:1)

开发人员无法使用某些调用。周期。

如果您需要此类信息,则会PhoneStateListener这样example

答案 4 :(得分:1)

使用它:

private PhoneStateListener mPhoneListener = new PhoneStateListener() {
    @Override
    public void onServiceStateChanged(ServiceState serviceState) {
        Log.d(TAG, "Phone State: " + serviceState.getState());
        phone_state = serviceState.getState();
        super.onServiceStateChanged(serviceState);
    }
};

并在OnCreate中:

TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
tm.listen(mPhoneListener, PhoneStateListener.LISTEN_SERVICE_STATE);

答案 5 :(得分:0)

在Android 8中,您有以下内容:

tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
tm.getServiceState();
不要忘记添加权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />