Note that there are some explanatory texts on larger screens.

plurals
  1. POandroid app works fine in android 2.3.3 but stops in android 4.1.2
    text
    copied!<p>Mine is an android tracking app. It gets gps location and send it to server. if gps location is not found it gets location using cell id. It works fine in android 2.3.3 . It also works in android 4.1.2 but stops after some time(2hrs or 8 hrs,sometimes 1 day), without any force close message. I googled but didn't find the error. Are any methods deprecated in 2.3.3. Below is my code. the service is started repeatedly by the <code>BroadcastReceiver</code> which is started by <code>AlarmManager</code>.<br> I have written this in my <strong>manifest file:</strong></p> <pre><code>&lt;uses-sdk android:minSdkVersion="7" android:targetSdkVersion="18"/&gt; </code></pre> <p><strong>GPSLoggerService class:</strong></p> <pre><code>public class GPSLoggerService extends Service implements LocationListener { @Override public void onCreate() { AppLog.logString("GPSLoggerService.onCreate()."); final SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); AppLog.logString("GPSLoggerService.onCreate()."); data_mode = settings.getInt("data_mode", 1); boolean firstRecordAfterBoot = settings.getBoolean("justBooted", false); settings.edit().putBoolean("justBooted", false); super.onCreate(); // db = new DBAdapter(this); } public int onStartCommand(Intent intent, int flags, int startId) { appendLog("in onStartCommend, "); AppLog.logString("GPSLoggerService.onStartCommand()."); this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); startLoggingService(); startMonitoringTimer(); try { sendData(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // dbadapter = new DBAdapter(this); return Service.START_STICKY; } @Override public void onLocationChanged(Location location) { appendLog("onLocationChanged, "); AppLog.logString("GPSLoggerService.onLocationChanged()."); didFindLocation = true; latitude = location.getLatitude(); longitude = location.getLongitude(); altitude = location.getAltitude(); // Toast.makeText(getApplicationContext(),"lat :"+latitude+"longi :"+longitude, // Toast.LENGTH_LONG).show(); gpsaltitude = String.valueOf(altitude); gpslatitude = String.valueOf(latitude); gpslongitude = String.valueOf(longitude); mps = location.getSpeed(); kmh = (float) (mps * 3.6); speed = Float.toString(kmh); SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); datetime = sdfDateTime.format(new Date(location.getTime())); appendLog(datetime + ", "); } @Override public void onProviderDisabled(String provider) { AppLog.logString("GPSLoggerService.onProviderDisabled()."); appendLog("onLocationChanged, "); } @Override public void onProviderEnabled(String provider) { AppLog.logString("GPSLoggerService.onProviderEnabled()."); appendLog("onProviderEnabled, "); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { AppLog.logString("GPSLoggerService.onStatusChanged()."); appendLog("onStatusChanged, "); } private void startLoggingService() { AppLog.logString("GPSLoggerService.startLoggingService."); turnGPSOn(); db = new DBAdapter(this); if (manager == null) { manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); } ma = new MainActivity(); final Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setAltitudeRequired(true); criteria.setSpeedRequired(true); criteria.setBearingRequired(true); criteria.setPowerRequirement(Criteria.POWER_LOW); final String bestProvider = manager.getBestProvider(criteria, true); if (bestProvider != null &amp;&amp; bestProvider.length() &gt; 0) { manager.requestLocationUpdates(bestProvider, gpsMinTime, gpsMinDistance, this); startTimer(); } else { final List&lt;String&gt; providers = manager.getProviders(true); for (final String provider : providers) { manager.requestLocationUpdates(provider, gpsMinTime, gpsMinDistance, this); startTimer(); } } } private void stopLoggingService() { this.unregisterReceiver(this.mBatInfoReceiver); stopSelf(); } private void startMonitoringTimer() { monitoringTimer = new Timer(); AppLog.logString("GPSLoggerService.monitoringTimer."); monitoringTimer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { if (longitude != 0.0 &amp;&amp; latitude != 0.0) { monitoringTimer.cancel(); monitoringTimer = null; turnGPSOn(); saveData(); manager.removeUpdates(GPSLoggerService.this); stopLoggingService(); } } }, GPSLoggerService.TIMER_DELAY, GPSLoggerService.TIMER_DELAY); } private void startTimer() { AppLog.logString("GPSLoggerService.countDownTimer."); appendLog("startTimer, "); // Toast.makeText(getApplicationContext(),"data_mode="+data_mode, // Toast.LENGTH_LONG).show(); if (countDownTimer != null) { countDownTimer.cancel(); countDownTimer = null; } countDownTimer = new CountDownTimer(15000L, 1000L) {// 15 seconds // max @Override public void onTick(long millisUntilFinished) { if (didFindLocation) { countDownTimer.cancel(); } } @Override public void onFinish() { if (!didFindLocation) { appendLog("onFinish, "); manager.removeUpdates(GPSLoggerService.this); // stopSelf() if (data_mode == 1) { cellID(); } else { /* * TelephonyManager telephonyManager = * (TelephonyManager * )getSystemService(Context.TELEPHONY_SERVICE); * imeiCellID = telephonyManager.getDeviceId(); * SimpleDateFormat sdfDateTime = new * SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); * datetimeCellID = sdfDateTime.format(new Date()); * db.open(); * id=db.insertData(imeiCellID,"null","null" * ,datetimeCellID,"null","null",level1); * db.close(); */ Toast.makeText(getApplicationContext(), "GPS : Cant find Location", Toast.LENGTH_LONG).show(); } stopLoggingService(); } } }; countDownTimer.start(); } private void turnGPSOn() { String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if (!provider.contains("gps")) { // if gps is disabled final Intent poke = new Intent(); poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); poke.addCategory(Intent.CATEGORY_ALTERNATIVE); poke.setData(Uri.parse("1")); sendBroadcast(poke); } } public void appendLog(String text) { // Toast.makeText(getApplicationContext(),"oncreate", // Toast.LENGTH_LONG).show(); File folder3 = new File(Environment.getExternalStorageDirectory(), "BPCLTracker"); if (!folder3.exists()) { folder3.mkdirs(); } try { File kmlFile3 = new File(folder3.getPath(), "logfile.txt"); if (!kmlFile3.exists()) { kmlFile3.createNewFile(); } RandomAccessFile fileAccess3 = new RandomAccessFile(kmlFile3, "rw"); FileLock lock = fileAccess3.getChannel().lock(); fileAccess3.seek(kmlFile3.length()); fileAccess3.write(text.getBytes()); lock.release(); fileAccess3.close(); } catch (IOException e) { e.printStackTrace(); } } public boolean isInternetOn() { ConnectivityManager connec = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // ARE WE CONNECTED TO THE NET if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTING || connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING || connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) { return true; } else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) { return false; } return false; } public int setFlag() { final SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); boolean firstRecord = settings.getBoolean("firstRecord", false); boolean firstRecordAfterBoot = settings.getBoolean("justBooted", false); if (firstRecord == true) { flag = 0; // Toast.makeText(getBaseContext(),"1st record after installation : "+flag,Toast.LENGTH_LONG // ).show(); settings.edit().putBoolean("firstRecord", false).commit(); } else if (firstRecordAfterBoot == true) { flag = 1; // Toast.makeText(getBaseContext(),"1st record after boot : "+flag,Toast.LENGTH_LONG // ).show(); settings.edit().putBoolean("justBooted", false).commit(); } else { flag = 2; // Toast.makeText(getBaseContext(),"regular : "+flag,Toast.LENGTH_LONG // ).show(); } return flag; } public void cellID() { appendLog("in cellID, "); TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation(); int cid = cellLocation.getCid(); int lac = cellLocation.getLac(); SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); datetimeCellID = sdfDateTime.format(new Date()); appendLog(datetimeCellID); String cell_Id = String.valueOf(cid); String gsm_Loc_Area_Code = String.valueOf(lac); // Toast.makeText(getBaseContext(),"cellid="+cell_Id+"\nGsm Location Area Code:"+gsm_Loc_Area_Code,Toast.LENGTH_LONG // ).show(); if (RqsLocation(cid, lac)) { TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); imeiCellID = tm.getDeviceId(); latitude_cellID = String.valueOf((float) myLatitude / 1000000); longitude_cellID = String.valueOf((float) myLongitude / 1000000); // Toast.makeText(getBaseContext(),"Lat:"+latitude_cellID+"Long:"+longitude_cellID,Toast.LENGTH_LONG // ).show(); // DBAdapter db=new DBAdapter(this); // --add contact---- db.open(); setFlag(); datatype = String.valueOf(flag); id = db.insertData(imeiCellID, latitude_cellID, longitude_cellID, datetimeCellID, "null", "null", level1, datatype, "0"); db.close(); // --get all contacts---------- db.open(); Cursor c = db.getAllData(); if (c.moveToFirst()) { do { DisplayData(c); } while (c.moveToNext()); } db.close(); }// if else { Toast.makeText(getBaseContext(), "CellID : Can't find Location", Toast.LENGTH_LONG).show(); }// else }// cellID private Boolean RqsLocation(int cid, int lac) { appendLog("in req location, "); // Toast.makeText(getBaseContext(),"inReqloc",Toast.LENGTH_LONG // ).show(); Boolean result = false; String urlmmap = "http://www.google.com/glm/mmap"; try { URL url = new URL(urlmmap); URLConnection conn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) conn; httpConn.setRequestMethod("POST"); httpConn.setDoOutput(true); httpConn.setDoInput(true); httpConn.connect(); OutputStream outputStream = httpConn.getOutputStream(); WriteData(outputStream, cid, lac); InputStream inputStream = httpConn.getInputStream(); DataInputStream dataInputStream = new DataInputStream(inputStream); dataInputStream.readShort(); dataInputStream.readByte(); int code = dataInputStream.readInt(); if (code == 0) { myLatitude = dataInputStream.readInt(); myLongitude = dataInputStream.readInt(); result = true; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } private void WriteData(OutputStream out, int cid, int lac) throws IOException { DataOutputStream dataOutputStream = new DataOutputStream(out); dataOutputStream.writeShort(21); dataOutputStream.writeLong(0); dataOutputStream.writeUTF("en"); dataOutputStream.writeUTF("Android"); dataOutputStream.writeUTF("1.0"); dataOutputStream.writeUTF("Web"); dataOutputStream.writeByte(27); dataOutputStream.writeInt(0); dataOutputStream.writeInt(0); dataOutputStream.writeInt(3); dataOutputStream.writeUTF(""); dataOutputStream.writeInt(cid); dataOutputStream.writeInt(lac); dataOutputStream.writeInt(0); dataOutputStream.writeInt(0); dataOutputStream.writeInt(0); dataOutputStream.writeInt(0); dataOutputStream.flush(); } public void saveData() { // Toast.makeText(getApplicationContext(),"in saveData", // Toast.LENGTH_LONG).show(); if (isInternetOn()) { appendLog("in saveDataAfter if internet is on, "); TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); imeino = tm.getDeviceId(); // DBAdapter db=new DBAdapter(this); // --add contact---- db.open(); setFlag(); datatype = String.valueOf(flag); id = db.insertData(imeino, gpslatitude, gpslongitude, datetime, gpsaltitude, speed, level1, datatype, "1"); db.close(); } else if (!isInternetOn()) { appendLog("in saveDataAfter if internet is not not on, "); TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); imeino = tm.getDeviceId(); // DBAdapter db=new DBAdapter(this); // --add contact---- db.open(); setFlag(); datatype = String.valueOf(flag); id = db.insertData(imeino, gpslatitude, gpslongitude, datetime, gpsaltitude, speed, level1, datatype, "1"); db.close(); }// elseif }// end of saveData() function public void sendData() throws ClientProtocolException, IOException { // Toast.makeText(getApplicationContext(),"in sendData", // Toast.LENGTH_LONG).show(); appendLog("sendData, "); if (isInternetOn()) { JSONObject jObject = new JSONObject(); try { // DBAdapter db=new DBAdapter(this); db.open(); Cursor cursor = db.getAllData(); if (cursor.moveToFirst()) { do { jObject = new JSONObject(); jObject.put("Imei", cursor.getString(1)); jObject.put("Lat", cursor.getString(2)); jObject.put("Long", cursor.getString(3)); jObject.put("Gpsdatetime", cursor.getString(4)); jObject.put("Altitude", cursor.getString(5)); jObject.put("Speed", cursor.getString(6)); jObject.put("Battery", cursor.getString(7)); jObject.put("DataType", cursor.getString(8)); jObject.put("DataSource", cursor.getString(9)); String datatoServer = jObject.toString() + "\n"; // Toast.makeText(getApplicationContext(),datatoServer, // Toast.LENGTH_LONG).show(); HttpEntity entity; HttpClient client = new DefaultHttpClient(); String url = "http://some IP/insertv2.php"; HttpPost request = new HttpPost(url); StringEntity se = new StringEntity(datatoServer); se.setContentEncoding("UTF-8"); se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); entity = se; request.setEntity(entity); HttpResponse response = client.execute(request); entity = response.getEntity(); db.deleteContacts(cursor.getLong(0)); } while (cursor.moveToNext()); }// if db.close(); }// try catch (JSONException e) { e.printStackTrace(); } } } // method }// end of service class </code></pre> <p><strong>Error log:</strong></p> <pre><code>11-12 16:43:46.174: E/AndroidRuntime(23962): FATAL EXCEPTION: main 11-12 16:43:46.174: E/AndroidRuntime(23962): android.os.NetworkOnMainThreadException 11-12 16:43:46.174: E/AndroidRuntime(23962): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118) 11-12 16:43:46.174: E/AndroidRuntime(23962): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 11-12 16:43:46.174: E/AndroidRuntime(23962): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 11-12 16:43:46.174: E/AndroidRuntime(23962): at java.net.InetAddress.getAllByName(InetAddress.java:214) 11-12 16:43:46.174: E/AndroidRuntime(23962): at libcore.net.http.HttpConnection.&lt;init&gt;(HttpConnection.java:70) 11-12 16:43:46.174: E/AndroidRuntime(23962): at libcore.net.http.HttpConnection.&lt;init&gt;(HttpConnection.java:50) 11-12 16:43:46.174: E/AndroidRuntime(23962): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 11-12 16:43:46.174: E/AndroidRuntime(23962): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 11-12 16:43:46.174: E/AndroidRuntime(23962): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 11-12 16:43:46.174: E/AndroidRuntime(23962): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315) 11-12 16:43:46.174: E/AndroidRuntime(23962): at libcore.net.http.HttpEngine.connect(HttpEngine.java:310) 11-12 16:43:46.174: E/AndroidRuntime(23962): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 11-12 16:43:46.174: E/AndroidRuntime(23962): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 11-12 16:43:46.174: E/AndroidRuntime(23962): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 11-12 16:43:46.174: E/AndroidRuntime(23962): at bpcl.gps.tracker.GPSLoggerService.RqsLocation(GPSLoggerService.java:468) 11-12 16:43:46.174: E/AndroidRuntime(23962): at bpcl.gps.tracker.GPSLoggerService.cellID(GPSLoggerService.java:414) 11-12 16:43:46.174: E/AndroidRuntime(23962): at bpcl.gps.tracker.GPSLoggerService$3.onFinish(GPSLoggerService.java:288) 11-12 16:43:46.174: E/AndroidRuntime(23962): at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:118) 11-12 16:43:46.174: E/AndroidRuntime(23962): at android.os.Handler.dispatchMessage(Handler.java:99) 11-12 16:43:46.174: E/AndroidRuntime(23962): at android.os.Looper.loop(Looper.java:137) 11-12 16:43:46.174: E/AndroidRuntime(23962): at android.app.ActivityThread.main(ActivityThread.java:4947) 11-12 16:43:46.174: E/AndroidRuntime(23962): at java.lang.reflect.Method.invokeNative(Native Method) 11-12 16:43:46.174: E/AndroidRuntime(23962): at java.lang.reflect.Method.invoke(Method.java:511) 11-12 16:43:46.174: E/AndroidRuntime(23962): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 11-12 16:43:46.174: E/AndroidRuntime(23962): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 11-12 16:43:46.174: E/AndroidRuntime(23962): at dalvik.system.NativeStart.main(Native Method) </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload