Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
EduardSakh
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 44
1

Не всплывают уведомления при запуске будильника

01.10.2018, 12:03. Просмотров 290. Ответов 3
Метки нет (Все метки)

Я написал простейший будильник под андроид.
Но когда он начинает звонить,не появляется уведомление.
В классе сервисов всё прописано правильно,я проверял даже несколько раз.
В манифесте тоже прописан сервис.
В чём может быть проблема? Неделю сижу над этим. В других приложениях никогда такого не было.
Вот класс сервисов: Функция startForeground() находится на 121 строке класса RingtonePlayingService
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
import android.annotation.TargetApi;
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.media.MediaPlayer;
import android.os.Build;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.widget.Toast;
 
import java.util.Random;
 
import static com.example.edisa.douglasadamsalarmclock.App.CHANNEL_ID;
 
public class RingtonePlayingService extends Service {
 
 
    private boolean isRunning;
    private Context context;
    MediaPlayer mMediaPlayer;
    private int startId;
 
 
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.e("MyActivity", "In the Richard service");
        return null;
    }
 
 
 
    public int onStartCommand(Intent intent, int flags, int startId)
    {
 
        Intent notificationIntent = new Intent(this, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,
                0, notificationIntent, 0);
 
        Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
                .setContentTitle("Example Service")
                .setContentText("Click me")
                .setSmallIcon(R.drawable.ic_action_call)
                .setContentIntent(pendingIntent)
                .build();
 
       
 
 
 
        String state = intent.getExtras().getString("extra");
 
        Log.e("what is going on here  ", state);
 
        assert state != null;
        switch (state) {
            case "no":
                startId = 0;
                break;
            case "yes":
                startId = 1;
                break;
            default:
                startId = 0;
                break;
        }
 
 
        if(!this.isRunning && startId == 1) {
            Log.e("if there was not sound ", " and you want start");
 
            int min = 1;
            int max = 9;
 
            Random r = new Random();
            int random_number = r.nextInt(max - min + 1) + min;
            Log.e("random number is ", String.valueOf(random_number));
 
            if (random_number == 1) {
                mMediaPlayer = MediaPlayer.create(this, R.raw.richard_dawkins_1);
            }
            else if (random_number == 2) {
                mMediaPlayer = MediaPlayer.create(this, R.raw.richard_dawkins_2);
            }
            else if (random_number == 3) {
                mMediaPlayer = MediaPlayer.create(this, R.raw.richard_dawkins_3);
            }
            else if (random_number == 4) {
                mMediaPlayer = MediaPlayer.create(this, R.raw.richard_dawkins_4);
            }
            else if (random_number == 5) {
                mMediaPlayer = MediaPlayer.create(this, R.raw.richard_dawkins_5);
            }
            else if (random_number == 6) {
                mMediaPlayer = MediaPlayer.create(this, R.raw.richard_dawkins_6);
            }
            else if (random_number == 7) {
                mMediaPlayer = MediaPlayer.create(this, R.raw.richard_dawkins_7);
            }
            else if (random_number == 8) {
                mMediaPlayer = MediaPlayer.create(this, R.raw.richard_dawkins_8);
            }
            else if (random_number == 9) {
                mMediaPlayer = MediaPlayer.create(this, R.raw.richard_dawkins_9);
            }
            else {
                mMediaPlayer = MediaPlayer.create(this, R.raw.richard_dawkins_1);
            }
            //mMediaPlayer = MediaPlayer.create(this, R.raw.richard_dawkins_1);
 
            mMediaPlayer.start();
 
            //Запуск уведомления
         
          startForeground(1,notification);
 
            this.isRunning = true;
            this.startId = 0;
 
        }
        else if (!this.isRunning && startId == 0){
            Log.e("if there was not sound ", " and you want end");
 
            this.isRunning = false;
            this.startId = 0;
 
        }
 
        else if (this.isRunning && startId == 1){
            Log.e("if there is sound ", " and you want start");
 
            this.isRunning = true;
            this.startId = 0;
 
        }
        else {
            Log.e("if there is sound ", " and you want end");
 
            mMediaPlayer.stop();
            mMediaPlayer.reset();
 
            this.isRunning = false;
            this.startId = 0;
        }
 
 
        Log.e("MyActivity", "In the service");
 
        return START_NOT_STICKY;
 
    }
 
 
    @Override
    public void onDestroy() {
        Log.e("JSLog", "on destroy called");
        super.onDestroy();
 
        this.isRunning = false;
    }
 
 
 
 
 
 
}
Класс MainActivity
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
import android.annotation.TargetApi;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.Toolbar;
 
import java.util.Calendar;
import java.util.Random;
 
/*Alarm fragment*/
public class MainActivity extends AppCompatActivity {
    AlarmManager alarmManager;
    private PendingIntent pending_intent;
 
    private TimePicker alarmTimePicker;
    private TextView alarmTextView;
 
    private AlarmReceiver alarm;
 
 
    MainActivity inst;
    Context context;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
 
 
        this.context = this;
 
        //alarm = new AlarmReceiver();
        alarmTextView = (TextView) findViewById(R.id.alarmText);
 
        final Intent myIntent = new Intent(this.context, AlarmReceiver.class);
 
        // Get the alarm manager service
        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
 
        // set the alarm to the time that you picked
        final Calendar calendar = Calendar.getInstance();
 
        alarmTimePicker = (TimePicker) findViewById(R.id.alarmTimePicker);
 
 
 
        Button start_alarm= (Button) findViewById(R.id.start_alarm);
        start_alarm.setOnClickListener(new View.OnClickListener() {
            @TargetApi(Build.VERSION_CODES.M)
 
            @Override
            public void onClick(View v) {
 
                calendar.add(Calendar.SECOND, 3);
                //setAlarmText("You clicked a button");
 
                final int hour = alarmTimePicker.getCurrentHour();
                final int minute = alarmTimePicker.getCurrentMinute();;
 
                Log.e("MyActivity", "In the receiver with " + hour + " and " + minute);
                setAlarmText("You clicked a " + hour + " and " + minute);
 
 
                calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour());
                calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute());
 
                myIntent.putExtra("extra", "yes");
                pending_intent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
 
                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pending_intent);
 
 
                // now you should change the set Alarm text so it says something nice
 
 
                setAlarmText("Alarm set to " + hour + ":" + minute);
                //Toast.makeText(getApplicationContext(), "You set the alarm", Toast.LENGTH_SHORT).show();
            }
 
        });
 
        Button stop_alarm= (Button) findViewById(R.id.stop_alarm);
        stop_alarm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
 
                int min = 1;
                int max = 9;
 
                Random r = new Random();
                int random_number = r.nextInt(max - min + 1) + min;
                Log.e("random number is ", String.valueOf(random_number));
 
                myIntent.putExtra("extra", "no");
                sendBroadcast(myIntent);
 
                alarmManager.cancel(pending_intent);
                setAlarmText("Alarm canceled");
                //setAlarmText("You clicked a " + " canceled");
            }
        });
 
    }
 
    public void setAlarmText(String alarmText) {
        alarmTextView.setText(alarmText);
    }
 
 
 
    @Override
    public void onStart() {
        super.onStart();
        inst = this;
    }
 
    @Override
    public void onDestroy() {
        super.onDestroy();
 
        Log.e("MyActivity", "on Destroy");
    }
 
 
 
 
}

Класс AlarmReceiver
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
import android.app.job.JobScheduler;
import android.app.job.JobService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.util.Log;
 
/**
 * Starts the ringtone service all the time the alarm is supposed to go off
 */
public class AlarmReceiver extends BroadcastReceiver{
 
 
    @Override
    public void onReceive(Context context, Intent intent) {
        String state = intent.getExtras().getString("extra");
        Log.e("MyActivity", "In the receiver with " + state);
 
        Intent serviceIntent = new Intent(context,RingtonePlayingService.class);
        serviceIntent.putExtra("extra", state);
 
        context.startService(serviceIntent);
 
 
 
    }
}
Класс App для проверки API
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
import android.app.Application;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.os.Build;
 
public class App extends Application {
    public static final String CHANNEL_ID="serviceChannelId";
 
    @Override
    public void onCreate(){
        super.onCreate();
 
        createNotificationChannel();
    }
 
    private void createNotificationChannel() {
 
        //Check if we are on API 26 or higher
 
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            NotificationChannel serviceChannel=new NotificationChannel(
                    CHANNEL_ID,
                    "Service channel",
                    NotificationManager.IMPORTANCE_DEFAULT
            );
            NotificationManager manager = getSystemService(NotificationManager.class);
            manager.createNotificationChannel(serviceChannel);//created as soon as we start our app
        }
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2018, 12:03
Ответы с готовыми решениями:

Выполнить функцию при срабатываении будильника
Здравствуйте. Столкнулся с такой проблемой. В приложении будильника при срабатывании рествера в...

Загрузка приложения при срабатывании будильника
Здравствуйте. в приложении включается будильник и при его срабатывании выполняется метод из...

при запуске браузера всплывают вредоносные сайты
Здравствуйте, при запуске любого браузера всплывают левые сайты. вот логи

Всплывают окна с рекламой в браузерах, открываются новые окна, всплывают рекламные баннеры
Здравствуйте. В браузере Opera часто перекидывает на сторонние сайты, всплывают рекламные баннеры.

Выбор мелодии будильника из папки при нажатии кнопки
Делаю будильник. На форме button. Как сделать, чтобы пользователь мог сам выбирать мелодию для...

3
VASSUV
MiThEoN
443 / 307 / 35
Регистрация: 31.10.2009
Сообщений: 505
Записей в блоге: 2
Завершенные тесты: 1
01.10.2018, 12:28 2
Проверяешь на каком устройстве? с андроидом 8 и выше?
0
+1
324 / 157 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
01.10.2018, 15:53 3
Чот я не нашел у тебя показа уведомления
0
EduardSakh
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 44
01.10.2018, 20:02  [ТС] 4
Цитата Сообщение от VASSUV Посмотреть сообщение
Проверяешь на каком устройстве? с андроидом 8 и выше?
Да,восьмая версия и АПИ 26
Какими методами тут воспользоваться надо?

Добавлено через 43 минуты
Цитата Сообщение от +1;1293.7212
Чот я не нашел у тебя показа уведомления
Эта вот функция
mMediaPlayer.start();
0
01.10.2018, 20:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2018, 20:02

При выставлении времени будильника, не правильно выставляются секунды
Привет, всем! :) Помогите разобраться. Пишу простенький будильник, и вроде все работает, но есть...

Файл при запуске по двойному щелчку мыши не работает как при запуске в терминале
Есть текстовый файл Goodgame.sh с таким кодом: xclip -o > clipboard.txt...

При запуске из среды программа работает, при запуске выполняемого файла выдает ошибку
Добавлено через 1 минуту 35 секунд как исправить ошибки в названии темы? там должно было быть...


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

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

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