Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 30.03.2021
Сообщений: 25

Не запускается аудиофайл из AlarmManager

13.07.2024, 17:08. Показов 299. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пробую написать приложение-будильник с выбором аудиофайла. Выбор происходит в файле SetAlarmActivity.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
private ActivityResultLauncher<Intent> fileChooserOpener = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
        @Override
        public void onActivityResult(ActivityResult result) {
            if (result.getResultCode() == Activity.RESULT_OK) {
                Intent intent = result.getData();
                if (intent != null) {
                    song = intent.getData();
                    fileName.setText(song.toString());
                }
            }
        }
    });
 
    public void openFileChooser(View view) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            while (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                // Разрешение не предоставлено, запросите его у пользователя
                requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 123);
            }
            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            intent.setType("audio/*");
            fileChooserOpener.launch(intent);
        }
        else {
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.setType("audio/*");
            fileChooserOpener.launch(intent);
        }
    }
AlarmManager устанавливается в 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
27
28
29
30
31
32
33
34
35
36
private ActivityResultLauncher<Intent> createAlarm = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
        @Override
        public void onActivityResult(ActivityResult result) {
            if (result.getResultCode() == Activity.RESULT_OK) {
                Intent intent = result.getData();
                String name = intent.getStringExtra(NAME_MSG);
                int time = intent.getIntExtra(TIME_MSG, 0);
                boolean alarmMode =  intent.getBooleanExtra(ALARM_MSG, false);
                boolean coffeeMode =  intent.getBooleanExtra(COFFEE_MSG, false);
                Uri song = intent.getParcelableExtra(SONG_MSG);
                if (alarmManager != null) {
                    System.out.println("Not null");
                    manager.addAlarm(MainActivity.this, new Alarm(MainActivity.this, manager, name, time, alarmMode, coffeeMode, song));
                    Calendar calendar = Calendar.getInstance();
                    calendar.set(
                            calendar.get(Calendar.YEAR),
                            calendar.get(Calendar.MONTH),
                            calendar.get(Calendar.DAY_OF_MONTH),
                            time/60,
                            time%60,
                            0);
 
                    android.app.AlarmManager.AlarmClockInfo alarmClockInfo = new android.app.AlarmManager.AlarmClockInfo(calendar.getTimeInMillis(), getThisIntent());
                    alarmManager.set(android.app.AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), getAlarmIntent(name, song));
                    /*
                    Intent alarm = new Intent(MainActivity.this, AlarmActivity.class);
                    alarm.putExtra(NAME_MSG, name);
                    alarm.putExtra(SONG_MSG, song.toString());
                    alarmRes.launch(alarm);
                    */
                    System.out.println("Set!");
                }
                update();
            }
        }
    });
И сам код будильника лежит в AlarmActivity.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
@Override
    public void onCreate(Bundle savedInstanceState) {
        System.out.println("Called");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.alarm_activity);
        btn = findViewById(R.id.button);
        txt = findViewById(R.id.text);
        Intent intent = getIntent();
        String name = intent.getStringExtra(NAME_MSG);
        txt.setText(name);
        player = new MediaPlayer();
        if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            System.out.println("Permission error!");
            return;
        }
        try {
            Uri song = Uri.parse(getRealPathFromURI(Uri.parse(intent.getStringExtra(SONG_MSG))));
            System.out.println(song.getPath());
            player.setDataSource(getApplicationContext(), song);
            player.prepare();
            player.start();
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
            System.out.println(e.getStackTrace());
        }
    }
 
    private String getRealPathFromURI(Uri uri) {
        String filePath = "";
        if (uri.getScheme().equals("content")) {
            Cursor cursor = getContentResolver().query(uri, null, null, null, null);
            if (cursor != null) {
                if (cursor.moveToFirst()) {
                    int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
                    filePath = cursor.getString(index);
                }
                cursor.close();
            }
        } else if (uri.getScheme().equals("file")) {
            filePath = uri.getPath();
        }
        return filePath;
    }
До какого то момента все работает, но когда будильник должен сработать - приложение выдает ошибку
Permission Denial: opening provider com.android.externalstorage.ExternalStor ageProvider from ProcessRecord{b193868 24534etrign.kettle.mobile/u0a378} (pid=24534, uid=10378) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
В чем может быть проблема? Если убрать функцию перевода в полноценный Uri, то программа просто отказывается создавать MediaPlayer. При попытке запуска AlarmActivity напрямую, не через AlarmManager, все работает без проблем, в манифесте на AlarmActivity exported = "true"

Добавлено через 26 минут
Я нашел решение, просто надо получать полный путь до файла через вот этот код
https://stackoverflow.com/ques... 6#61995806
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.07.2024, 17:08
Ответы с готовыми решениями:

Не запускается фоновый сервис через AlarmManager
Задача: запускать ежедневно в конце дня сервис, который собирает статистику и записывает ее в БД. Реализую, используя AlarmManager. Код...

Аудиофайл
Здравствуйте! Мне очень интересна работа с ауди на Android, но я мало нашел информации в сети интернет. А волнует меня не только...

Аудиофайл
как сделать что бы, когда мне надо, включался аудиофайл? Добавлено через 36 минут как вставить звук?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.07.2024, 17:08
Помогаю со студенческими работами здесь

Проиграть аудиофайл
Есть аудиофайл. Например, Mp3. Надо его воспроизвести. Желательно, очень желательно, чтобы программа при этом продолжала работать и могла...

Воспроизвести аудиофайл
Не могу понять какой код надо использовать... Система такая Dim GoHa As String GoHa = InputBox(&quot;...&quot;, &quot;...&quot;,...

AlarmManager
Добрый вечер, как задать время вручную ? alarmManager.set(AlarmManager.RTC, System.currentTimeMillis(), pendingIntent);

AlarmManager
Всем привет. Взял код AlarmManager отсюда. В свой проект добавил AlarmManagerBroadcastReceiver.java и код AlarmManagerActivity.java в свое...

как добавить аудиофайл в БД
как добавить аудиофайл в БД (Paradox)


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru