Задать вопрос
@timur102

Почему пишет «приложение AppName остановлено»?

Захотелось сделать приложение, которое будет в 15:45 включать звук на телефоне, а в 8:45 отключать звук. Захотелось реализовать через AsyncTask.
Запуск приложения -> выводит время -> 5 секунд проходит -> вылетает. Почему?
MainActivty.java
package com.pepelac.test_sound_change;

import android.annotation.SuppressLint;
import android.content.Context;
import android.media.AudioManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Calendar;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        assert am != null;
        am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
        am.setRingerMode(AudioManager.RINGER_MODE_SILENT); /* mute */
        MyTask longTask;
        longTask = new MyTask();
        longTask.execute();
    }

    @SuppressLint("StaticFieldLeak")
    class MyTask extends AsyncTask<Void, Void, Void> {
        @SuppressLint("ShowToast")
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Toast toast = Toast.makeText(getApplicationContext(),
                    "ok!", Toast.LENGTH_SHORT);
            toast.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            while (true) {

                task();

                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
        }

        public void task() {
            AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            Calendar calendar = Calendar.getInstance();
            int hour = calendar.get(Calendar.HOUR);
            int minute = calendar.get(Calendar.MINUTE);
            int PM = calendar.get(Calendar.AM_PM);
            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
            TextView textView = (TextView) findViewById(R.id.textView);
            textView.setText(String.valueOf(hour) +':'+String.valueOf(minute));
            if (hour == 8 && minute == 45 && PM == 0)
                am.setRingerMode(AudioManager.RINGER_MODE_SILENT);
            if (PM == 1) {
                switch (dayOfWeek) {
                    case 2:
                        if (hour == 3 && minute == 45) {
                            am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                        }
                    case 3:
                        if (hour == 3 && minute == 45) {
                            am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                        }
                    case 4:
                        if (hour == 3 && minute == 45) {
                            am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                        }
                    case 5:
                        if (hour == 3 && minute == 45) {
                            am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                        }
                    case 6:
                        if (hour == 3 && minute == 45) {
                            am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                        }
                    case 7:
                        if ((hour == 1) && (minute == 0))
                            am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                }
            }
        }

    }
}
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 2
402d
@402d
начинал с бейсика на УКНЦ в 1988
Не надо жрать батерейку. Смотри в сторону рецейвера системного бродкаста наступила новая минута.
Ответ написан
@red-barbarian
Потому что из бэкграунда не надо менять вьюхи.
Или если менять то не через set
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы