Форум программистов, компьютерный форум CyberForum.ru

Подружить receiver и service - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android долгая загрузка http://www.cyberforum.ru/android-dev/thread923781.html
Пишу игрушку и проблема в том что контент грузиться 4-5 секунд работающий вариант public class MainActivity extends Activity { private WorldController controller; private MenuController menuController; private boolean isGame; @Override
Программирование Android AdMob баннер Кто сталкивался с такой проблемой - в эмуляторе AdMob баннер работает, а на физическом устройстве его попросту нет, т.е. пустое место? Все что можно перерыл уже... Делал согласно инструкции http://habrahabr.ru/post/133858/ http://www.cyberforum.ru/android-dev/thread923772.html
Google maps Программирование Android
Здравствуйте! Недавно начал разработку приложения с использованием google maps и при первом же этапе проектирования возникли проблемы. Имеется в виду простое отображение карты на layout. Приложение не загружает карту. Делал по примеру гугловской литературы. Собственно я хочу, чтобы вы подсказали где у меня ошибка в коде. API key: AIzaSyBJ40WcfO_nAnjy1-e3drIQXDEQtAkVQ-o Android apps: ...
Как организовать последовательную передачу данных между тремя активностями? Программирование Android
Здравствуйте! Столкнулся с проблемой. Есть потребность в справочном приложении, которое будет выглядеть следующим образом: Из первой активности (ListView) через intent происходит передача картинки во вторую активность в зависимости от выбранного элемента. Во второй активности необходимо перейти к комментарию в виде текста в третьей активности. Вывод через нажатие иконки в Action Bar. ...
Программирование Android Подскажите с работой сервиса в андроид http://www.cyberforum.ru/android-dev/thread923634.html
вообщем вот у меня есть сервис: import java.util.ArrayList; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONException; import org.json.JSONObject;
Программирование Android Настройка экрана при откладке в BlueStacks Добрый день, тормоза и зависания стандартного эмулятора невыносимы. Решил перейти на BlueStacks по этой статье http://habrahabr.ru/company/infopulse/blog/148512/ в которой указано что можно менять тип экрана под мобильный как здесь https://getsatisfaction.com/bstk/topics/hxg3m5nqqxuls Однако на моем эмуляторе такой выбор просто отсутствует! см. скрин подробнее

Показать сообщение отдельно
jenyakirmiza
1 / 1 / 0
Регистрация: 13.02.2013
Сообщений: 90

Подружить receiver и service - Программирование Android

16.07.2013, 01:24. Просмотров 1224. Ответов 8
Метки (Все метки)

вообщем такая ситуация. У меня есть сервис который каждые 10 минут отправляет данные на сервер.
Мне нужно сделать так чтоб этот сервис работал правильно. То есть нужно отследить если есть соединение с инетом или нет, нужно сделать как-то по умному, тут уже гавнокод не прокатит.

вот класс сервиса:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package com.example.androidhive;
 
import java.util.ArrayList;
import java.util.List;
 
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.app.ProgressDialog;
import android.app.Service;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.util.Log;
import android.widget.Toast;
 
public class GPSService extends Service {
    // Progress Dialog
        private Double lat=0.0;
        private Double lon=0.0;
        JSONParser jsonParser = new JSONParser();
 
        // url to create new product
        private static String url_create_product = "http://www.wiseguys.com.ua/android_connect/create_product.php";
 
        // JSON Node names
        private static final String TAG_SUCCESS = "success";
      private Looper mServiceLooper;
      private ServiceHandler mServiceHandler;
 
      // Handler that receives messages from the thread
      private final class ServiceHandler extends Handler {
          public ServiceHandler(Looper looper) {
              super(looper);
          }
          @Override
          public void handleMessage(Message msg) {
              // Normally we would do some work here, like download a file.
              // For our sample, we just sleep for 5 seconds.
              while(true){
                  
              _getLocation();
              String coord1 = lat.toString();           
                String coord2 = lon.toString();
                // Building Parameters
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("coord1", coord1));
                params.add(new BasicNameValuePair("coord2", coord2));
                params.add(new BasicNameValuePair("description", "1"));
 
                // getting JSON Object
                // Note that create product url accepts POST method
                JSONObject json = jsonParser.makeHttpRequest(url_create_product,
                        "POST", params);
                
                // check log cat fro response
                Log.d("Create Response", json.toString());
 
                // check for success tag
                try {
                    int success = json.getInt(TAG_SUCCESS);
 
                    if (success == 1) {
                        // successfully created product
                    /*  Intent i = new Intent(getApplicationContext(), AllProductsActivity.class);
                        startActivity(i);
                        finish();
                        */
                        
                    } else {
                        // failed to create product
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
 
              long endTime = System.currentTimeMillis() + 60*10*1000;
              while (System.currentTimeMillis() < endTime) {
                  synchronized (this) {
                      try {
                          wait(endTime - System.currentTimeMillis());
                      } catch (Exception e) {
                      }
                  }
              }
              }
          }
          
          
      }
 
      @Override
      public void onCreate() {
        // Start up the thread running the service.  Note that we create a
        // separate thread because the service normally runs in the process's
        // main thread, which we don't want to block.  We also make it
        // background priority so CPU-intensive work will not disrupt our UI.
        HandlerThread thread = new HandlerThread("ServiceStartArguments",
                Process.THREAD_PRIORITY_BACKGROUND);
        thread.start();
        
        // Get the HandlerThread's Looper and use it for our Handler 
        mServiceLooper = thread.getLooper();
        mServiceHandler = new ServiceHandler(mServiceLooper);
      }
 
      @Override
      public int onStartCommand(Intent intent, int flags, int startId) {
          Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
 
          // For each start request, send a message to start a job and deliver the
          // start ID so we know which request we're stopping when we finish the job
          Message msg = mServiceHandler.obtainMessage();
          msg.arg1 = startId;
          mServiceHandler.sendMessage(msg);
          
          // If we get killed, after returning from here, restart
          return START_STICKY;
      }
 
      @Override
      public IBinder onBind(Intent intent) {
          // We don't provide binding, so return null
          return null;
      }
      
      @Override
      public void onDestroy() {
        Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); 
      }
      private void _getLocation() {
            // Get the location manager
            LocationManager locationManager = (LocationManager) 
                    getSystemService(LOCATION_SERVICE);
            Criteria criteria = new Criteria();
            String bestProvider = locationManager.getBestProvider(criteria, false);
            Location location = locationManager.getLastKnownLocation(bestProvider);
            LocationListener loc_listener = new LocationListener() {
 
                public void onLocationChanged(Location l) {}
 
                public void onProviderEnabled(String p) {}
 
                public void onProviderDisabled(String p) {}
 
                public void onStatusChanged(String p, int status, Bundle extras) {}
            };
            locationManager
                    .requestLocationUpdates(bestProvider, 0, 0, loc_listener);
            location = locationManager.getLastKnownLocation(bestProvider);
            try {
                lat = location.getLatitude();
                lon = location.getLongitude();
            } catch (NullPointerException e) {
                lat = -1.0;
                lon = -1.0;
            }
        }
    }
как видите он будет работать бессконечно как служба, пока его не закрыть средствами диспетчера задач.
И у меня есть ресивер:

манифест:

XML
1
2
3
4
5
6
<receiver android:name=".ReceiverName" >
    <intent-filter >
        <action android:name="android.net.wifi.STATE_CHANGE" />
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.example.androidhive;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
 
public class NetworkChangeReceiver extends BroadcastReceiver {
 
      @Override
      public void onReceive(final Context context, final Intent intent) {
        final ConnectivityManager connMgr = (ConnectivityManager) 
        context.getSystemService(Context.CONNECTIVITY_SERVICE);
 
        final android.net.NetworkInfo wifi = 
        connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
 
        final android.net.NetworkInfo mobile = 
        connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
 
        if (wifi.isAvailable()) {
          //Do something
        if (mobile.isAvailable()) {
          //Do something else
        }
      }
    }
}
вопрос: как их подружить? вот к примеру ресивер сработает, как я сообщу сервису что ему нужно поставить паузу и потом когда появится инет опять продолжать работу? можно ли такое сделать и как.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru