我有一个服务,以一定的间隔轮询服务器.我使用AlarmManager和BroadcastReceiver来启动服务.我的问题是,经过一段时间后,即使Wifi仍然启用,但由于某种原因,我的应用程序无法联系服务器.我收到"无法访问的网络"错误.
请注意,我已经获得了部分唤醒锁和wifilock.
这是我的BroadcastReceiver代码.
public class ServiceAlarmBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
WakeLock wakeLock = null;
WifiLock wifiLock = null;
try {
PowerManager pm = (PowerManager) context
.getSystemService(Context.POWER_SERVICE);
// acquire a WakeLock to keep the CPU running
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakeLock");
if(!wakeLock.isHeld()){
wakeLock.acquire();
}
Log.i("ServiceAlarmBroadcastReceiver", "WakeLock acquired!");
WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL , "MyWifiLock");
if(!wifiLock.isHeld()){
wifiLock.acquire();
}
Log.i("ServiceAlarmBroadcastReceiver", "WifiLock acquired!");
context.startService(new Intent(context, ThePollerService.class));
} finally {
// release the WakeLock to allow CPU …Run Code Online (Sandbox Code Playgroud) 我正在尝试在活动之外查询联系人内容提供商.但是,managedQuery是一种Activity的方法.是否有任何其他类/方法可以使用而不是managedQuery?
这是我的代码:
class MyActivity extends Activity {
private Cursor getContacts() {
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER };
String where = null;
String[] whereArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
return context.managedQuery(uri, projection, where, whereArgs, sortOrder);
}
}
Run Code Online (Sandbox Code Playgroud)