作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望我的应用程序能够协议(protocol),是否可以连接到网络以及当前 GSM 连接的信号强度。我想每分钟都重复这个过程。
此时我的类(class)看起来像:
public class UmtsActivity extends Activity {
[...]
TelephonyManager Tel;
MyPhoneStateListener MyListener;
int currentSignalStrength;
[...]
private class MyPhoneStateListener extends PhoneStateListener
{
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength)
{
super.onSignalStrengthsChanged(signalStrength);
currentSignalStrength = signalStrength.getGsmSignalStrength();
}
到目前为止,我只使用 phonestateListener 的 onSignalStrengthsChanged() 函数读取 SignalStrength。有没有其他方法可以节省 CPU 时间?
真诚的沃尔芬
最佳答案
如果您使 PhoneStateListener 成为服务的一部分,那么您的应用程序中就有一个始终知道当前信号强度的组件。然后,应用程序的 UI 部分可以按需查询服务的状态,或者在强度变化超过某个限制时发布更新。例如,信号强度变化很快 - 因此只有在变化超过 10% 时才发布更新或按时间限制更新。
例如(此处更新只发送感兴趣的对象发生变化(mSms 或 mMins),并且每 5 次信号强度变化一次。应用程序的 Activity 将接收此 Intent。这由服务的 PhoneStateListener 覆盖方法调用。
/* called from the phone state listener to check for any changes in the number of sms/calls since last time
* and to raise a suitable intent if required. Check the time to avoid calling too fast.
*/
private void update()
{
final String key = getString(R.string.pref_periodstart_key);
final String defVal = getString(R.string.periodstart_defaultValue);
Thread thread = new Thread(null, new Runnable() {
public void run() {
Context context = getApplicationContext();
int start = Integer.valueOf(mPrefs.getString(key, defVal));
Date date = PhoneUsageInfo.getLastContractDate(start);
int mins = PhoneUsageInfo.getMinutesUsedSince(context, date);
int sms = PhoneUsageInfo.getSMSCountSince(context, date);
boolean changed = (mins != mMins || sms != mSms);
if (changed || mCount % 5 == 0) {
mMins = mins;
mSms = sms;
Intent intent = new Intent(Constants.INTENT_USAGE_UPDATE);
intent.putExtra(Constants.EXTRA_SMS_COUNT, sms);
intent.putExtra(Constants.EXTRA_MIN_COUNT, mins);
intent.putExtra(Constants.EXTRA_START_DATE, date);
Log.d(TAG, String.format("service sending broadcast intent sms %d, mins %d (%s)", sms, mins, changed?"changed":"unchanged"));
sendBroadcast(intent);
}
mCount += 1;
}
}, "PhoneUsageServiceUpdate");
thread.start();
}
关于android - 如何在不使用 onSignalStrengthsChanged() 的情况下访问 SignalSteength?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805689/
我希望我的应用程序能够协议(protocol),是否可以连接到网络以及当前 GSM 连接的信号强度。我想每分钟都重复这个过程。 此时我的类(class)看起来像: public class UmtsA
我是一名优秀的程序员,十分优秀!