我在尝试调用时收到“无法在未调用 looper.prepare 的线程内创建处理程序”错误,
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
但是,如果我不在线程内调用它( run() )它工作正常..我该怎么办?
编辑:MyAlarmService.java
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
System.out.println("Handle MSGGGGGGGGGG");
}
};
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
WorkerThreads WT1 = new WorkerThreads("Thread1");
WorkerThreads WT2 = new WorkerThreads("Thread2");
WT1.start();
WT2.start();
}
class WorkerThreads extends Thread{
public WorkerThreads(String string) {
// TODO Auto-generated constructor stub
super(string);
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
if(getName().equals("Thread1")){
System.out.println("MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM");
GetAlarmCoordinates gcc = new GetAlarmCoordinates();
gcc.init(getApplicationContext(),handler);
/*try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
System.out.println(MyAlarmService.currentLatLon[0] + " " + MyAlarmService.currentLatLon[1] );
}else if(getName().equals("Thread2")){
}
}
}
GetAlarmCoordinates.java
public void init(Context cont, Handler handler){
mHandler = handler;
locManager = (LocationManager) cont.getSystemService(Context.LOCATION_SERVICE);
onClick();
}
public void onClick() {
// progress.setVisibility(View.VISIBLE);
// exceptions will be thrown if provider is not permitted.
System.out.println("GetCurrentLocation");
try {
gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
}
try {
network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
}
System.out.println("gps_enabled : "+gps_enabled+ " network_enabled : "+network_enabled);
if (gps_enabled) {
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
}
if (network_enabled) {
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
}
}
class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
// This needs to stop getting the location data and save the battery power.
locManager.removeUpdates(locListener);
//locationManager.requestLocationUpdates(GPS_PROVIDER, intervall, distance, listener);
latitude = location.getLatitude();
londitude = location.getLongitude();
MyAlarmService.currentLatLon[0] = latitude;
MyAlarmService.currentLatLon[1] = londitude;
System.out.println("Alarm Coodinates lat : "+latitude+" lon : "+londitude);
mHandler.sendEmptyMessage(0);
//notify();
}
}