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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Arovav
Сообщений: n/a
#1

Сервис срабатывает когда не надо - Программирование Android

03.07.2014, 15:24. Просмотров 504. Ответов 0
Метки нет (Все метки)

Проблема в том что когда запускаю сервис на эмуляторе(android 4.0.3), то все работает как надо(данные отсылаются раз в час), а когда запускаю на телефоне то по не понятной мне причине сервис срабатывает постоянно, приблизительно раз в минуту. Пост идет сюда http://gprsbtn.herokuapp.com/coordinates и просто добавляет запись в базу.
Подскажите в чем может быть дело
AndroidManifest.xml
XML
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.aravov.gprsbtn"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="16" />
    
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.aravov.gprsbtn.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name="MyService"></service>
        <receiver android:name=".AlarmReciever"/>
    </application>
 
</manifest>
MainActivity.java
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
package com.aravov.gprsbtn;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
 
public class MainActivity extends Activity {
    final String LOG_TAG = "myLogs";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    public void btnClc(View v) {
        startService(new Intent(this, MyService.class));
        Toast.makeText(this, "Service started", Toast.LENGTH_SHORT).show();
    }
 
    public void btnClc2(View v) {
        stopService(new Intent(this, MyService.class));
    }
}
GPSTracker.java
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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
package com.aravov.gprsbtn;
 
import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.util.Log;
 
public class GPSTracker extends Service implements LocationListener {
 
    private final Context mContext;
 
    // flag for GPS status
    boolean isGPSEnabled = false;
 
    // flag for network status
    boolean isNetworkEnabled = false;
 
    // flag for GPS status
    boolean canGetLocation = false;
 
    Location location; // location
    double latitude; // latitude
    double longitude; // longitude
 
    // The minimum distance to change Updates in meters
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
 
    // The minimum time between updates in milliseconds
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
 
    // Declaring a Location Manager
    protected LocationManager locationManager;
 
    public GPSTracker(Context context) {
        this.mContext = context;
        getLocation();
    }
 
    public Location getLocation() {
        try {
            locationManager = (LocationManager) mContext
                    .getSystemService(LOCATION_SERVICE);
 
            // getting GPS status
            isGPSEnabled = locationManager
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);
 
            // getting network status
            isNetworkEnabled = locationManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
 
            if (!isGPSEnabled && !isNetworkEnabled) {
                // no network provider is enabled
            } else {
                this.canGetLocation = true;
                // if GPS Enabled get lat/long using GPS Services
                if (isGPSEnabled) {
                    if (location == null) {
                        locationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        Log.d("GPS Enabled", "GPS Enabled");
                        if (locationManager != null) {
                            location = locationManager
                                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return location;
    }
    
    /**
     * Stop using GPS listener
     * Calling this function will stop using GPS in your app
     * */
    public void stopUsingGPS(){
        if(locationManager != null){
            locationManager.removeUpdates(GPSTracker.this);
        }       
    }
    
    /**
     * Function to get latitude
     * */
    public double getLatitude(){
        if(location != null){
            latitude = location.getLatitude();
        }
        
        // return latitude
        return latitude;
    }
    
    /**
     * Function to get longitude
     * */
    public double getLongitude(){
        if(location != null){
            longitude = location.getLongitude();
        }
        
        // return longitude
        return longitude;
    }
    
    /**
     * Function to check GPS/wifi enabled
     * @return boolean
     * */
    public boolean canGetLocation() {
        return this.canGetLocation;
    }
    
    /**
     * Function to show settings alert dialog
     * On pressing Settings button will lauch Settings Options
     * */
    public void showSettingsAlert(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
     
        // Setting Dialog Title
        alertDialog.setTitle("GPS is settings");
 
        // Setting Dialog Message
        alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
 
        // On pressing Settings button
        alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                mContext.startActivity(intent);
            }
        });
 
        // on pressing cancel button
        alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
            }
        });
 
        // Showing Alert Message
        alertDialog.show();
    }
 
    @Override
    public void onLocationChanged(Location location) {
    }
 
    @Override
    public void onProviderDisabled(String provider) {
    }
 
    @Override
    public void onProviderEnabled(String provider) {
    }
 
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
 
    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
 
}
MyService.java
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
package com.aravov.gprsbtn;
 
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.json.JSONObject;
 
import android.app.AlarmManager;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
 
public class MyService extends Service {
    PendingIntent pendingIntent;
    AlarmManager alarmManager;
    BroadcastReceiver mReceiver;
    final String LOG_TAG = "myLogs";
 
    public void onCreate() {
        super.onCreate();
        Log.d(LOG_TAG, "onCreate");
    }
 
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(LOG_TAG, "onStartCommand");
        someTask();
        sendNotif();
        return super.onStartCommand(intent, flags, startId);
    }
 
    public void sendNotif() {
        Notification notification = new Notification(R.drawable.ic_stat_gprsbtn, "Text in status bar",
                System.currentTimeMillis());
        Intent notificationIntent = new Intent(this, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
        notification.setLatestEventInfo(this, "Notification's title", "Notification's text", pendingIntent);
        startForeground(1992, notification);
    }
 
    public void onDestroy() {
        stop();
        super.onDestroy();
        Log.d(LOG_TAG, "onDestroy");
    }
 
    public IBinder onBind(Intent intent) {
        Log.d(LOG_TAG, "onBind");
        return null;
    }
 
    void someTask() {
        mReceiver = new BroadcastReceiver()
        {
            // private static final String TAG = "Alarm Example Receiver";
            @Override
            public void onReceive(Context context, Intent intent)
            {
                action();
            }
        };
 
        registerReceiver(mReceiver, new IntentFilter("gprs.post"));
        pendingIntent = PendingIntent.getBroadcast( this, 0, new Intent("gprs.post"),0 );
        alarmManager = (AlarmManager)(this.getSystemService( Context.ALARM_SERVICE ));
        
        // timer here <<< 1000 * 60 = 1 minute
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, 1000 * 60 * 60 , pendingIntent); 
    }
    
    
    public void action() {
        GPSTracker gps = new GPSTracker(MyService.this);
        
        //final double latitude = gps.getLatitude();
        //final double longitude = gps.getLongitude();
        
        final String lat = Double.toString(gps.latitude);
        final String lon = Double.toString(gps.longitude);
        
        // check if GPS enabled     
        if(gps.canGetLocation())
        {
            //posting
            Thread t = new Thread(){
                public void run(){
                    postData(lat, lon);
                }
            };
            t.start();
        }
        
        else
        {
            // can't get location
            // GPS or Network is not enabled
            // Ask user to enable GPS/network in settings
            gps.showSettingsAlert();
        }
    }
    
    public void postData(String latitude, String longitude) {
        try {
            HttpParams p = new BasicHttpParams();
            HttpClient client = new DefaultHttpClient(p);  
            HttpPost post = new HttpPost("http://gprsbtn.herokuapp.com/coordinates"); 
            JSONObject params = new JSONObject();
            params.put("latitude",latitude);
            params.put("longitude",longitude);
            StringEntity ent = new StringEntity(params.toString());
            post.setEntity(ent);
            post.setHeader("Content-type", "application/json");
            client.execute(post);
            
            //URL url = new URL("http://gprsbtn.herokuapp.com/treqs/pst");
            //URLConnection conn = url.openConnection(); 
            //conn.setDoOutput(true); 
            //OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
            //wr.write( params.toString() ); 
            //wr.flush(); 
            
            Log.d(LOG_TAG, "onDataSent");
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    
    // stop the alarm receiver
    public void stop() {
        try {
            unregisterReceiver(mReceiver);
            Toast.makeText(this, "Service stoped", Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
        }
    }
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2014, 15:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сервис срабатывает когда не надо (Программирование Android):

Сервис останавливается когда закрывается приложение - Программирование Android
Добрый вечер, господа. Перечитал очень много статей по поводу сервисов в Android. Вроде все делаю правильно, но не понимаю почему так...

AlarmManager не срабатывает, когда телефон засыпает - Программирование Android
Использую AlarmManager. Все работает хорошо, но когда телефон не спит. Стоит ему уснуть и процесс не выполнится. Подскажите в какую сторону...

FCM: не срабатывает onMessageReceived когда приложение прибито - Программирование Android
Здравствуйте. Столкнулся с проблемой -- не срабатывает onMessageReceived когда приложение закрыто. Когда в foreground, background -- все...

Notification когда надо - Программирование Android
Надо сделать показ Notification в указаное время....Понимаю что роботать надо с Service i Notification... Подкиньте какието стати, уроки,...

echo срабатывает, когда не надо - PHP
Пытаюсь набить руку под написание пхп кода, но сталкнулся с несколькими ошибками, вот одна из них: Должен при успешнои регистрации...

Когда надо и когда не надо применять наследование? - PHP ООП
Здравствуйте. В общем начал потихоньку изучать ооп в php (в других языках тоже с ним не знаком). И никак не могу понять для чего нужно...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2014, 15:24
Привет! Вот еще темы с ответами:

надо решить задачу: a*b=x,надо вывести х, а когда a и b равны 0, то написать что корней множество, а когда a или b равен 0, то вывести что корней нет - Pascal
Здравствуйте господа... У меня вот такая проблема, на завтра надо решить задачу: a*b=x,надо вывести х, а когда a и b равны 0, то написать...

Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию? - C++
1)Любезные,скажите когда надо исп. списки инициализации, а когда можно заменить констуктором по умолчанию? 2) правильно ли...

Когда и как срабатывает eof() ? - C++
Программа: #include &lt;Windows.h&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;iomanip&gt; using...

Javascript срабатывает когда ему хочется - JavaScript
Здравствуйте, проблема в срабатывании скрипта, он то работает то не работает &lt;script type=&quot;text/javascript&quot;&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru