Жму пункт меню:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.System.canWrite(getApplicationContext())) {
Toast.makeText(getApplicationContext(), getResources().getString(R.string.toast_sys_sett),
Toast.LENGTH_LONG).show();
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + getApplicationContext().getPackageName()));
startActivity(intent);
} else {
pickRingtone();
}
} else {
pickRingtone();
}
Попадаю в метод с интентом:
public void pickRingtone() {
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Ringtone");
Uri urie = RingtoneManager.getActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, urie);
startActivityForResult(intent, CODE_RESULT_SOUND);
}
Получаю результат:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CODE_RESULT_SOUND) {
if (resultCode == RESULT_OK) {
Uri uri = null;
if (resultCode == Activity.RESULT_OK && data != null) {
uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
Ringtone ringtone = RingtoneManager.getRingtone(this, uri);
String title = ringtone.getTitle(this);
// Toast.makeText(this, title, Toast.LENGTH_SHORT).show();
Editor ed = sPref.edit();
ed.putString("ringtone", title);
ed.putString("media",uri.toString());
ed.commit();
//Toast.makeText(this, sPref.getString("media","DEFAULT_RINGTONE_URI"), Toast.LENGTH_SHORT).show();
// ringtone.play();
}
}
}
АлармРесивер:
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, context.getResources().getString(R.string.app_name), NotificationManager.IMPORTANCE_HIGH);
channel.setDescription(context.getResources().getString(R.string.channel_desc));
channel.enableLights(true);
channel.enableVibration(true);
channel.setSound(Uri.parse(sPref.getString("media","DEFAULT_RINGTONE_URI")), new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build());
notificationManager.createNotificationChannel(channel);
Notification.Builder mBuilder = new Notification.Builder(context,CHANNEL_ID)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(context.getResources().getString(R.string.notif_text))
.setTicker(currentDate)
.setAutoCancel(true)
.setContentIntent(pendintent)
.setContentText(currentDate);
mBuilder.setAutoCancel(true);
NotificationManager nNotifManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);//
nNotifManager.notify(notifyID, mBuilder.build());
}
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(context.getResources().getString(R.string.notif_text))
.setTicker(currentDate)
.setAutoCancel(true)
.setSound(Uri.parse(sPref.getString("media","DEFAULT_RINGTONE_URI")))
.setContentIntent(pendintent)
.setContentText(currentDate);
mBuilder.setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS);
mBuilder.setAutoCancel(true);
NotificationManager nNotifManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);//
nNotifManager.notify(notifyID, mBuilder.build());
В MainActivity:
Intent intent2 = new Intent(this, AlarmReceiver.class);
intent2.putExtra("image", Fname);
PendingIntent pendintent = PendingIntent.getBroadcast(this, 0, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
try {
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(sPref.getString("hour", "09")));
calendar.set(Calendar.MINUTE, Integer.parseInt(sPref.getString("minute", "55")));
} catch (NullPointerException M) {
calendar.set(Calendar.HOUR_OF_DAY, Hour);
calendar.set(Calendar.MINUTE, Minute);
}
long alarmTime = calendar.getTimeInMillis();
if (alarmTime < System.currentTimeMillis() + 1000)
alarmTime += 24 * 60 * 60 * 1000;
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, AlarmManager.INTERVAL_DAY, pendintent);
Проверяю на трех устройствах (планшет 5.1 и два телефона 5.1 и 8.1)
А теперь итоги.
Просто запускаю программу и ничего не делаю. Телефон и планшет с "леденцом" просто жужжат и показывают уведомление, Орео не реагирует вообще.
Меняю в настройках звук уведомления с помощью ТоталКоммандера (выбираю в интенте). Все три устройства реагируют - в назначенное время выдают уведомление со звуком.
Меняю звук с помощью стандартного "Хранилище мультимедиа". См. пункт первый. Причем, для проверки, пробовал одну и ту же мелодию.
Опять пользуюсь Тоталом. И опять начинает работать.
Если раскомментировать строку "ringtone.play();" - звук есть всегда.
6 Лог. Да, я вижу предупреждение "Could not open content...", но не могу понять что от меня требуется - почему external устраивает, а internal - нет.
Ну и, собственно, вопрос: где моя ошибка?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Вот например, у меня есть приложение которое выводит сумму в результате сложения выбранных чисел (из двух дат) , которая по итоге не превышает...
Что происходит в функции(person), можете написать по порядку?