gpt4 book ai didi

Android PhoneStateListener : onCellLocationChanged in standby mode

转载 作者:太空宇宙 更新时间:2023-11-03 11:22:22 25 4
gpt4 key购买 nike

我正在编写一个作为前台服务在后台运行的应用程序。此服务实例化 PhoneStateListener 的子类。 PhoneStateListener 使用前台服务的上下文对象创建 TelephonyService,然后监听单元格位置变化。这在显示打开时非常有效。但是一旦显示关闭,单元格的记录就不再起作用。

public class gps_service extends Service
{
public static TelephonyManager p_TelephonyManager = null;
public static myPhoneStateListener p_myPhoneStateListener = null;

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
p_myPhoneStateListener = new myPhoneStateListener();
p_TelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
p_TelephonyManager.listen(p_myPhoneStateListener, PhoneStateListener.LISTEN_CELL_LOCATION);
...

public class myPhoneStateListener extends PhoneStateListener
{
public static int CurrentCellID;
/*
public static int current_cell_id;
@Override
public void onCellLocationChanged(CellLocation p_CellLocation)
{
//write to log
}

<uses-sdk android:minSdkVersion="3" />    
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

当手机屏幕打开时,一切正常,但是当打开 onCellLocationChanged 事件的屏幕时,永远不会调用。我也试试GsmCellLocation currentCellLocation = (GsmCellLocation) p_TelephonyManager .getCellLocation();通过此代码始终返回屏幕外之前的最后一个单元格 ID,而不是实际的单元格 ID。

我也在我的服务中尝试了 partial_wake_lock,但结果相同:

private PowerManager pPowerManager = null;
private PowerManager.WakeLock pWakeLock = null;
..

@Override
public void onCreate()
{
super.onCreate();
pPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
pWakeLock = pPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "No sleep");
pWakeLock.acquire();
...
}

@Override
public void onDestroy()
{
if (pWakeLock != null)
{
pWakeLock.release();
pWakeLock = null;
}
...
}

知道我做错了什么吗?在 HTC Desire Z Android 2.2 上测试

最佳答案

这种情况是屏幕关闭,手机进入休眠模式。查看PowerManager .

定义了以下标志,对系统功率有不同的影响。这些标志是互斥的 - 您只能指定其中一个。

Flag Value            CPU   Screen  Keyboard
PARTIAL_WAKE_LOCK On* Off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright

*如果您持有部分唤醒锁,CPU 将继续运行,而不管任何计时器,甚至在用户按下电源按钮后也是如此。在所有其他唤醒锁中,CPU 将运行,但用户仍然可以使用电源按钮让设备进入休眠状态。

 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
..screen will stay on during this section..
wl.release();

关于Android PhoneStateListener : onCellLocationChanged in standby mode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5726521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com