Я использую Broadcast Receiver и Alarm with Pending Intent, чтобы запустить мою службу на BOOT_COMPLETE с некоторым фиксированным таймером. И я предоставляю статические значения переменной, а затем передаю их на веб-сервер (сервлет), пока этот мой код работает нормально ... но когда я добавляю Диспетчер местоположения, чтобы получить реальные координаты, приложение вылетает !! ошибка :: NULLPOinterException, !!! подскажите где я не прав!! будет самым детским.. спасибо !! [также хочу открыть камеру, когда ответ получен от сервлета, о чем я упоминал в комментарии внутри кода! ]
Это мой широковещательный приемник
public class StartAtBootServiceReceiver extends BroadcastReceiver
{
// receives BOOT_COMPLETed from manifest ,,plus added here Alarm
public void onReceive(Context context, Intent intent)
{
Calendar cal = Calendar.getInstance();
Intent srvIntent = new Intent(context, StartAtBootService.class);
PendingIntent pIntent = PendingIntent.getService(context, 0, srvIntent,0);
// Use context argument to access service
AlarmManager alarm = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
// Repeat every 5 seconds
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), 10000, pIntent);
}
}
Это мой класс службы Java
public class StartAtBootService extends Service {
public static final String url = "http://10.0.2.2:1010/junction/AsynLocInsertionServ";
String imei = "0";
double latitude = 000;
double longitude = 000;
String returnString = null;
Integer returnedValue = 0;
private LocationManager lm;
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Log.d("StartServiceAtBoot1", "StartAtBootService Created1");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("StartServiceAtBoot2", "StartAtBootService -- onStartCommand()");
// Get LocationManager object from System Services LOCATION_SERVICES
lm = (LocationManager) getSystemService(LOCATION_SERVICE);
// create a criteria object to retrieve provider
Criteria criteria = new Criteria();
// Get the name of the best provider
String provider = lm.getBestProvider(criteria, true);
// Get current Location
Location myLocation = lm.getLastKnownLocation(provider);
// get latitude of the current location
latitude = myLocation.getLatitude();
// get longitude of the current location
longitude = myLocation.getLongitude();
Toast.makeText(this, "onStart tryyyy", Toast.LENGTH_LONG).show();
deviceInfo(); // my method for getting imei
new GetXMLTask().execute(url); // calls the AsynTask
return START_STICKY;
}
public void deviceInfo() {
// TODO Auto-generated method stub
TelephonyManager t = (TelephonyManager) this
.getSystemService(Context.TELEPHONY_SERVICE);
imei = t.getDeviceId();
}
// *************************************************************************************************//
private class GetXMLTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String output = null;
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
try {
String latitude1 = String.valueOf(latitude);
String longitude2 = String.valueOf(longitude);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("param1imei",
imei));
nameValuePairs.add(new BasicNameValuePair("param2lati",
latitude1));
nameValuePairs.add(new BasicNameValuePair("param3longi",
longitude2));
// nameValuePairs.add(new BasicNameValuePair("param4bts",
// bts));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
output = EntityUtils.toString(httpEntity);
}// end of inner try block
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
} // end of outer try block
catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
return output;
} // end of getOutputFromUrl method
@Override
protected void onPostExecute(String output) {
super.onPostExecute(output);
Log.d("done LAtlong stored in mysql_onPost method",
" " + output.toString());
if (true) // i put this true ,because i wanna to open camera
// i,e if the value returned from doInBackgroud method [i,e the output variable]
// the condition ,then open camera
{
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
getApplicationContext().startActivityForResult(intent, 0);
}
}
} // end of GetXMLTask
}
НЕНАВИЖУ ЭТИ ::
05-06 17:56:46.492: E/AndroidRuntime(748): FATAL EXCEPTION: main
05-06 17:56:46.492: E/AndroidRuntime(748): java.lang.RuntimeException: Unable to start service r.fn.sender.StartAtBootService@40ce9358 with Intent { flg=0x4 cmp=r.fn.sender/.StartAtBootService (has extras) }: java.lang.NullPointerException
05-06 17:56:46.492: E/AndroidRuntime(748): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2673)
05-06 17:56:46.492: E/AndroidRuntime(748): at android.app.ActivityThread.access$1900(ActivityThread.java:141)
05-06 17:56:46.492: E/AndroidRuntime(748): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331)
05-06 17:56:46.492: E/AndroidRuntime(748): at android.os.Handler.dispatchMessage(Handler.java:99)
05-06 17:56:46.492: E/AndroidRuntime(748): at android.os.Looper.loop(Looper.java:137)
05-06 17:56:46.492: E/AndroidRuntime(748): at android.app.ActivityThread.main(ActivityThread.java:5039)
05-06 17:56:46.492: E/AndroidRuntime(748): at java.lang.reflect.Method.invokeNative(Native Method)
05-06 17:56:46.492: E/AndroidRuntime(748): at java.lang.reflect.Method.invoke(Method.java:511)
05-06 17:56:46.492: E/AndroidRuntime(748): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-06 17:56:46.492: E/AndroidRuntime(748): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-06 17:56:46.492: E/AndroidRuntime(748): at dalvik.system.NativeStart.main(Native Method)
05-06 17:56:46.492: E/AndroidRuntime(748): Caused by: java.lang.NullPointerException
05-06 17:56:46.492: E/AndroidRuntime(748): at r.fn.sender.StartAtBootService.onStartCommand(StartAtBootService.java:106)
05-06 17:56:46.492: E/AndroidRuntime(748): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2656)
05-06 17:56:46.492: E/AndroidRuntime(748): ... 10 more
**manifest permissions**
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" >
</uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />