Android bg service scrLock után is

Android bg service scrLock után is
2013-11-22T21:20:56+01:00
2013-11-30T13:18:55+01:00
2022-10-15T22:46:41+02:00
Peti_22
Üdv,

Egy korábbi kérdésemre hivatkozva: Android background service probléma - Tudástár - Prog.Hu

észre vettem, hogy amint lezárom a képernyőt a program nem képes adatot küldeni a szerveremre. Miután újra feloldom egyszerre elküldi az addig felgyűlt adatokat. Azt szeretném elérni, hogy a Background service a képernyő lezárása után is fusson és képes legyen elérni a GPS-t illetve a hálózatot a pozíció lekérdezéséhez és képes legyen azt elküldeni a szerveremre lezárt képernyőnél.

Ilyesmit találtam, de ez szerintem nem az ami nekem kell:


pm = (PowerManager)getApplicationContext().getSystemService(getApplicationContext().POWER_SERVICE); wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); wl.acquire(); //... wl.release();
Mutasd a teljes hozzászólást!
Rájöttem, hogy rossz helyen hívtam meg néhány dolgot. Működik!
Mutasd a teljes hozzászólást!

  • Lehet, hogy azért van, mert az internetkapcsolat megszakad amikor elaltatod a telefont. Van valami olyasmi a beállításokban, hogy "wifi alvás házirend", legalábbis újabb androidokon. Próbáld meg átállítani.

    de ez szerintem nem az ami nekem kell:

    A kód, amit beillesztettél, ébren tartja a CPUt, még akkor is ha az user "elaltatja" a telefont. Kell hozzá egy "android.permission.WAKE_LOCK" engedély (AndroidManifest.xml-be).
    Mutasd a teljes hozzászólást!
  • Igen beírtam azt is a manifest-be viszont billentyű zárás után is megkapok messenger és egyéb üzeneteket.
    Mutasd a teljes hozzászólást!
  • Találtam egy ilyet az talán megoldás lehet nekem, de nem tudom, hogyan kéne használnom: android - Service pauses on screen lock - Stack Overflow Hozzáadtam a jar fájlt és az osztályt is.

    és most így néz ki:

    import com.commonsware.cwac.wakeful.WakefulIntentService; public class MyService extends Service { PowerManager pm; WakeLock wl; private ProgressDialog pDialog; GPSTracker gps; Timer timer; TimerTask updateProfile; JSONParser jsonParser = new JSONParser(); private static final String TAG = "MyService"; private static String url_create_product = "http://valami.hu/coord.php"; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { Toast.makeText(this, "A program futtatása a háttérben...", Toast.LENGTH_LONG).show(); Log.d(TAG, "onCreate"); timer = new Timer(); updateProfile = new CustomTimerTask(MyService.this); } @Override public void onDestroy() { Toast.makeText(this, " FIGYELEM! A GPS koordináták küldésének leállítása!", Toast.LENGTH_LONG).show(); Log.d(TAG, "onDestroy"); } @Override public void onStart(Intent intent, int startid) { Toast.makeText(this, "A GPS koordinátáid 2 percenként küldésre kerülne.", Toast.LENGTH_LONG).show(); Log.d(TAG, "onStart..."); //pm = (PowerManager)getApplicationContext().getSystemService(getApplicationContext().POWER_SERVICE); //wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); //wl.acquire(); //timer.scheduleAtFixedRate(updateProfile, 1, 1000 * 60 * 2); //2 percenként fút le a localizáció. WakefulIntentService.sendWakefulWork(this, MyService.class); //wl.release(); } //////////////////////////////////////////// class CreateNewProduct extends AsyncTask<String, String, String> { /** * Before starting background thread Show Progress Dialog * */ @Override protected void onPreExecute() { super.onPreExecute(); //pDialog = new ProgressDialog(MyService.this); //pDialog.setMessage("Koordináták küldése..."); //pDialog.setIndeterminate(false); //pDialog.setCancelable(true); //pDialog.show(); } /** * Creating product * */ protected String doInBackground(String... args) { String name = "anonim"; String lat = Double.toString(gps.getLatitude()); String lng = Double.toString(gps.getLongitude()); String acc = Double.toString(gps.getAccuracy()); // Building Parameters List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("name", name)); params.add(new BasicNameValuePair("lat", lat)); params.add(new BasicNameValuePair("lng", lng)); params.add(new BasicNameValuePair("acc", acc)); // getting JSON Object // Note that create product url accepts POST method JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST", params); return null; } /** * After completing background task Dismiss the progress dialog * **/ protected void onPostExecute(String file_url) { // dismiss the dialog once done //pDialog.dismiss(); } } //////////////////////////////////////////// public class CustomTimerTask extends TimerTask { private Context context; private Handler mHandler = new Handler(); // Write Custom Constructor to pass Context public CustomTimerTask(Context con) { this.context = con; } @Override public void run() { // your code starts here. // I have used Thread and Handler as we can not show Toast without starting new thread when we are inside a thread. // As TimePicker has run() thread running., So We must show Toast through Handler.post in a new Thread. Thats how it works in Android.. new Thread(new Runnable() { @Override public void run() { mHandler.post(new Runnable() { @Override public void run() { gps = new GPSTracker(getApplicationContext()); // check if GPS enabled if(gps.canGetLocation()) { double latitude = gps.getLatitude(); double longitude = gps.getLongitude(); // \n is for new line Toast.makeText(getApplicationContext(), "Koordinátáid: - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show(); } else { // can't get location // GPS or Network is not enabled // Ask user to enable GPS/network in settings gps.showSettingsAlert(); } new CreateNewProduct().execute(); } }); } }).start(); } } ////////////////////////////// public class WakeService extends WakefulIntentService { public WakeService(String name) { super(name); } @Override protected void doWakefulWork(Intent intent) { timer.scheduleAtFixedRate(updateProfile, 1, 1000 * 20 * 1); // 20 sec } } }
    Mutasd a teljes hozzászólást!
  • A post szerint a WakefulIntentService kell hogy legyen a szolgáltatásod osztályának szülője, nem pedig simán Service.
    Azt, amit felébresztett állapotban akarsz végezni (pl. hálózati kommunikáció), a doWakefulWork()-ba tedd.
    Mutasd a teljes hozzászólást!
  • Letöltöttem a dolgokat és elvileg nekem a demo2 nevű project kellene ezt olvastam máshol, de nem úgy működik ahogy kellene. Még kísérletezgetek vele egy kicsit.

    Itt olvastam, hogy erre jó lenne a demo2: android - Making the WakefulIntentService wait for location callback to be called - Stack Overflow

    Be is tettem mind a 3 osztályt ami kell és elindítom az kezdő képernyőmről, de nem csinál semmit. Nem jut el a OnBootReceiver és OnAlarmReceiver valamint a AppService osztályokig.
    Mutasd a teljes hozzászólást!
  • Rájöttem, hogy rossz helyen hívtam meg néhány dolgot. Működik!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd