我做了一个服务,它使用phonestatelistener跟踪cellinfo的oncellinfochanged方法的更改,当屏幕打开时它可以正常工作,但是屏幕关闭了,甚至没有前台服务或部分wakelock让它继续运行。我发现,当屏幕关闭时,broadcastreceiver仍然接收到意图,我正在尝试找出如何用接收器重新创建该方法,或者如何将两者结合起来。我正在开发一个最低的api 27。
显示:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.INTERNET"/>
我的接收器,现在只记录:
public class ServiceStateReceiver extends BroadcastReceiver
{
private static TelephonyManager mTelephonyManager;
@SuppressLint("MissingPermission")
@Override
public void onReceive(Context context, Intent intent)
{
mTelephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
Log.d("Receiver", "Broadcast received");
listCells(mTelephonyManager.getAllCellInfo());
}
private void listCells(List<CellInfo> cellInfos)
{
for (CellInfo cell : cellInfos)
{
Log.d("Receiver", String.valueOf(cell.getTimeStamp()));
}
}
}
我用两个目的过滤器注册当前的broadcastreceiver:
ServiceStateReceiver receiver = new ServiceStateReceiver();
IntentFilter filter = new IntentFilter("android.intent.action.SERVICE_STATE");
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
mainActivity.getApplicationContext().registerReceiver(receiver, filter);
这就是我迷路的地方。我应该使用哪个意图过滤器?有没有更好的方法来实现这一点?我在几年前就找到了答案,但是android的标准一直在改变,并且不断地贬低某些东西,所以我不知道应该怎么做。我需要网络回拨吗?如果是这样的话,有没有人可以指导我如何设置(或者发布一个链接)?我找不到任何关于如何使用这些的明确例子。
它将接收当前意图,但我不知道它们是否等同于phonestatelistener所做的。
暂无答案!
目前还没有任何答案,快来回答吧!