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

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

Войти
Регистрация
Восстановить пароль
 
RAPOS
0 / 0 / 0
Регистрация: 05.08.2013
Сообщений: 35
#1

Если закрыть приложение, перестаёт работать сервис, что делать? - Android

21.12.2015, 06:13. Просмотров 233. Ответов 0
Метки нет (Все метки)

Сделал тестовое приложение на андроиде. Суть в том, чтобы сервис уведомлял человека "Notification" когда приложение закрыто.

При включении устройства запускается сервис с помощью "BroadcastReceiver" само же приложение закрыто и уведомления работают, с интервалом времени. Кликнкули на уведомление и запустилось приложение, но после того, как мы его закрываем (убираем из списка запущенных приложений), то уведомления перестают приходить.

При запуске устройства если зайти в
настройки->приложения->активные
то у моего приложения
Процессы: 1, Службы: 1
после того как мы запускаем приложение или переходим в него через уведомление и закрываем приложение (убираем из списка запущенных приложений) то результат такой:
Процессы: 0, Службы: 1

Я уже всё перепробовал, не знаю что делать, нужна помощь.

MainActivity.java
И использую стандартный BlankActivity
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
package ru.tagil_cs.test;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
 
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
 
        startService(new Intent(MainActivity.this, MyService.class));
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
}
MyResiver.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package ru.tagil_cs.test;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
 
public class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }
 
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent service = new Intent(context, MyService.class);
            context.startService(service);
            Log.d("AutoStart", "Запущен");
        }
    }
}
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
package ru.tagil_cs.test;
 
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Build;
import android.os.IBinder;
import android.util.Log;
 
import java.util.concurrent.TimeUnit;
 
public class MyService extends Service {
    private static final int NOTIFY_ID = 101;
 
    @Override
    public void onCreate()
    {
        Log.d("CallService", "Create");
        //Toast.makeText(this, "Служба создана", Toast.LENGTH_SHORT).show();
    }
 
    @Override
    public void onStart(Intent intent, int startid)
    {
        GetRequest();
        Log.d("CallService", "Старт");
        //Toast.makeText(this, "Служба запущена", Toast.LENGTH_SHORT).show();
    }
 
    public void onDestroy() {
        super.onDestroy();
        Log.d("CallService", "onDestroy");
    }
 
    public IBinder onBind(Intent intent) {
        Log.d("CallService", "onBind");
        return null;
    }
 
    public void GetRequest() {
        new UserDealsTask().execute((Void) null);
    }
 
    public class UserDealsTask extends AsyncTask<Void, Void, String> {
 
        UserDealsTask() {}
 
        @Override
        protected String doInBackground(Void... params) {
            String responseJSON = "{}";
            try {
                Log.d("CallService", "GetRequest Спит");
                TimeUnit.SECONDS.sleep(30);
                Log.d("CallService", "GetRequest Старт");
                GetRequest();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return responseJSON;
        }
 
        @Override
        protected void onPostExecute(String strJson) {
            super.onPostExecute(strJson);
            if(strJson != null) {
                //Формирование уведомления
                Context context = getApplicationContext();
 
                Resources res = context.getResources();
                Notification.Builder builder = new Notification.Builder(context);
 
                Intent notificationIntent = new Intent(context, MainActivity.class);
                notificationIntent.putExtra("notify", 1);
                notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                        | Intent.FLAG_ACTIVITY_SINGLE_TOP);
 
                PendingIntent contentIntent = PendingIntent.getActivity(context,
                        0, notificationIntent,
                        PendingIntent.FLAG_CANCEL_CURRENT);
 
                builder.setContentIntent(contentIntent)
                        .setSmallIcon(R.drawable.ic_icons)
                        .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.ic_icons))
                        .setWhen(System.currentTimeMillis())
                        .setAutoCancel(true)
                        .setTicker("Новый запрос на технику.") // текст в строке состояния
                        .setContentTitle("Объявление №" + 1) // Заголовок уведомления
                        .setContentText("213123123123"); // Текст уведомления
 
                NotificationManager notificationManager = (NotificationManager) context
                        .getSystemService(Context.NOTIFICATION_SERVICE);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    notificationManager.notify(NOTIFY_ID, builder.build());
                } else {
                    notificationManager.notify(NOTIFY_ID, builder.getNotification());
                }
            }
        }
    }
}
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ru.tagil_cs.test">
 
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.QUICKBOOT_POWERON" />
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
                <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
            </intent-filter>
        </receiver>
 
        <service
            android:name=".MyService"
            android:enabled="true"
            android:exported="true"/>
        <!-- Так тоже делал
        <service
            android:name=".MyService"
            android:enabled="true"
            android:exported="true"
            android:process=":myservice"/>
       -->
    </application>
 
</manifest>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2015, 06:13     Если закрыть приложение, перестаёт работать сервис, что делать?
Посмотрите здесь:

Какого размера делать приложение? Android
Android Как закрыть приложение из view activity?
Android Ребят что делать с данной ошибкой?
не знаю, что делать Android
Android Глючит кнопка Домой. Что делать?
Сервис и само приложение Android
Сервис останавливается когда закрывается приложение Android
Как закрыть приложение при нажатии кнопки back или home? Basic4Android
может кто подскажет что делать Android
Android Закрыть приложение при нажатии на кнопку
Android Не хочет работать программа, что делать? Android Studio + VK API
Android SetContentTitle and Text выдаёт цифры, что делать?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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