我正在尝试在ServiceState
中获取Activity
的实例。但是我该怎么做呢?没有静态方法可以在任何返回ServiceState
实例的服务上获取实例或任何方法
有TelephonyManager.listen()
电话。但是我希望在我想要的时候得到ServiceState
实例,而不是因为某些东西发生变化而Android调用我的监听器。
ServiceState
的文档可在此处找到:http://developer.android.com/reference/android/telephony/ServiceState.html
答案 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" />