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

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

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

Открытие приложенея после клика на нотификации (Service, notification) - Android

12.05.2015, 17:16. Просмотров 412. Ответов 5
Метки нет (Все метки)

всем добрый день.

Содал простое приложение. Одно Активити и одна служба.
Служба старуте вместе с осью.
задача службы просто выбросить нотификацию раз в 15 секунд. При нажатии на нотификацию должно запутиться единсвенное активити.
все это работет кроме:

если приложение запушено то клик по нотификации запускает следующие процедуры
onCreate
onStart
onResume

все в порядке.

но если приложение не запушено то при клике по нотификации эти процедуры вызываются только один раз - первый при запуске приложения.
при втором и последующих кликах ниодно не вызывается.

в чем может быть проблема?

Спасибо.

содается нотификация:

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
    void sendNotif(int id, String Tiker, String Titel, String Text) {
        Context context = getApplicationContext() ;
        Intent intent = new Intent(context, activity_for_notifi_click.class);
        //Intent intent = new Intent("ru.it.arketservice");
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.putExtra("messag_type", String.valueOf(new Date().getTime()));
        PendingIntent contentIntent = PendingIntent.getActivity(context,
                0, intent,
                PendingIntent.FLAG_CANCEL_CURRENT);
 
        Notification.Builder builder    = new Notification.Builder(context);
        Resources res                   = context.getResources();
        builder.setContentIntent(contentIntent)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(res, R.mipmap.ic_launcher))
                .setTicker(Tiker)
                .setWhen(System.currentTimeMillis())
                .setAutoCancel(true)
                .setContentTitle(Titel)
                .setContentText(Text);
        //Notification notification = builder.getNotification(); // if api 16
        Notification notification = builder.build();
        NotificationManager notificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(id, notification);
    }
вот так прописано в манифесте

XML
1
2
3
4
        <activity
            android:name=".activitis.activity_for_notifi_click"
            android:label="@string/title_activity_activity_for_notifi_click">
        </activity>
Добавлено через 37 минут
может для моей задачи нужно использовать класс производный от BroadcastReceiver

типа:

Java
1
2
3
4
5
6
7
8
public class Broadcast  extends BroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {
        context.startService(new Intent(context, ark_service.class));
        //App.Log("BroadcastReceiver");
    }
}
но я не понимаю как зарегистрировать этот класс в манифесте какие разрешения дать приложению и как вызывать из нотификации
подскажите как это сделать.

наверное при создании нотификации сделать что то такое:
.......
Intent intent = new Intent("ru.it.arketservice");
.......

а как зарегистрировать класс?
как сделать так что бы он реагировал (вызывался) при "ru.it.arketservice"?
и какие разрешения нужно дать пиложеню что бы получать эти рассылки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2015, 17:16     Открытие приложенея после клика на нотификации (Service, notification)
Посмотрите здесь:

beginner: голосовые нотификации Android
Android Доступ к Notification из Activity
Как сохранить состояние Service после перезагрузки телефона? Android
Service автозапуск после закрытия родителя Android
Уведомления Notification Android
Android Notification с картинкой
Кнопки в Notification Android
Android AlarmManager + Notification
Notification sound Android
Android Service, работающий даже после выключения пользователем приложения Android
Android Как сделать так, чтобы Service работал после закрытия программы
Android Иконки Notification в Android 5

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,069
12.05.2015, 17:29     Открытие приложенея после клика на нотификации (Service, notification) #2
Сервис зарегистрирован?
stepan_boroviko
0 / 0 / 0
Регистрация: 12.05.2015
Сообщений: 3
12.05.2015, 18:02  [ТС]     Открытие приложенея после клика на нотификации (Service, notification) #3
сервис работает ка часики.
нотификация ненерится все гуд.

просто не отрабатывают методы активити.

сечас сделал вот что:

создал класс:

Java
1
2
3
4
5
6
7
8
9
10
11
12
public class notifiBroadcast extends BroadcastReceiver {
    public notifiBroadcast() {
    }
 
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        //throw new UnsupportedOperationException("Not yet implemented");
        App.Log(intent.getAction().toString());
    }
}
поменял intent при создании нотификации:

...
Intent intent = new Intent("ru.it.arketservice"); //
intent.setAction(Intent.ACTION_DEFAULT);
....

зарегистрировал класс в манифесте:

XML
1
2
3
4
5
6
7
8
9
        <receiver
            android:name=".application.notifiBroadcast"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="ru.it.arketservice"/>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

но при клике на нотификации метод onReceive класса notifiBroadcast не отрабатывает.

может не хватате разрешения на принятие intent "ru.it.arketservice"
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,069
12.05.2015, 19:05     Открытие приложенея после клика на нотификации (Service, notification) #4
А с чего должен срабатывать onReceive? Я не вижу интента на него. Да и при клике на нотификацию должны только активити открываться или сервис запускаться. А notifiBroadcast это ни то ни другое.
stepan_boroviko
0 / 0 / 0
Регистрация: 12.05.2015
Сообщений: 3
12.05.2015, 20:21  [ТС]     Открытие приложенея после клика на нотификации (Service, notification) #5
задача решилась. ошибка была в строчке

Java
1
2
3
PendingIntent contentIntent = PendingIntent.getActivity(context,
                0, intent,
                PendingIntent.FLAG_CANCEL_CURRENT);
нужно использовать не getActivity а getBroadcast:

Вот так все это работате правильно:

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
void sendNotif(int id, String Tiker, String Titel, String Text) {
        Context context = getApplicationContext() ;
        Intent intent = new Intent();
        intent.setAction("ru.it.arketservice");
        intent.putExtra("id", id);
        PendingIntent contentIntent = PendingIntent.getBroadcast(context,
                0, intent,
                PendingIntent.FLAG_CANCEL_CURRENT);
 
        Notification.Builder builder    = new Notification.Builder(context);
        Resources res                   = context.getResources();
        builder.setContentIntent(contentIntent)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(res, R.mipmap.ic_launcher))
                .setTicker(Tiker)
                .setWhen(System.currentTimeMillis())
                .setAutoCancel(true)
                .setContentTitle(Titel)
                .setContentText(Text);
        //Notification notification = builder.getNotification(); // if api 16
        Notification notification = builder.build();
        NotificationManager notificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(id, notification);
    }
в манифесте

XML
1
2
3
4
5
6
7
8
        <receiver
            android:name=".application.notifiBroadcast"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="ru.it.arketservice"/>
            </intent-filter>
        </receiver>
класс бродкаст

Java
1
2
3
4
5
6
7
8
9
10
11
12
public class notifiBroadcast extends BroadcastReceiver {
    public notifiBroadcast() {
    }
 
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        //throw new UnsupportedOperationException("Not yet implemented");
        App.Log(intent.getAction().toString());
    }
}
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,069
12.05.2015, 20:25     Открытие приложенея после клика на нотификации (Service, notification) #6
Цитата Сообщение от stepan_boroviko Посмотреть сообщение
нужно использовать не getActivity а getBroadcast
А точно, Broadcast есть, беру свои слова обратно.
Yandex
Объявления
12.05.2015, 20:25     Открытие приложенея после клика на нотификации (Service, notification)
Ответ Создать тему
Опции темы

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