Parse.com - настраиваемый звук уведомления Android

Я знаю, что звук push-уведомлений в Android может быть настроен (на iOS уже работает).

Тем не менее, я не вижу ссылок в документах, только на пользовательский звук iOS.

Я видел в Parse.com форум, что такая функция была запрошена около года назад и ответила, что она была "на столе".

Любые обновления по этому поводу? Если "официально" не поддерживается, любое известное обходное решение, чтобы заставить его работать?

Ответ 1

Я понял решение. Это еще не доступно с помощью Parse API, но у них есть документация, в которой объясняется, как расширить свой ParsePushBroadcastReceiver.

Итак, создайте класс, который расширяет ParsePushBroadcastReceiver, а onReceive вызовет метод generateNotification и напишет специальный код, чтобы создать собственное собственное уведомление. Таким образом, вы можете включить звук. Прежде всего, вам нужно будет добавить новый звуковой файл (ex mp3) в исходный каталог в папке resources/res.

Кстати, не забудьте изменить приемник ParsePushBroadcastReceiver из манифеста, чтобы отразить ваш новый файл. Пример:

    <receiver android:name="com.parse.ParsePushBroadcastReceiver"
        android:exported="false">

к

    <receiver android:name="com.*my_package_name*.MyBroadcastReceiver"
        android:exported="false">

Вот мой код. Он работает и может использоваться повторно.

public class MyBroadcastReceiver extends ParsePushBroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    try {
        String jsonData = intent.getExtras().getString("com.parse.Data");
        JSONObject json = new JSONObject(jsonData);

        String title = null;
        if(json.has("title")) {
            title = json.getString("title");
        }

        String message = null;
        if(json.has("alert")) {
            message = json.getString("alert");
        }

        if(message != null) {
            generateNotification(context, title, message);
        }
    } catch(Exception e) {
        Log.e("NOTIF ERROR", e.toString());
    }
}


private void generateNotification(Context context, String title, String message) {
    Intent intent = new Intent(context, MainActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0);

    NotificationManager mNotifM = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

    if(title == null) {
        title = context.getResources().getString(R.string.app_name);
    }

    final NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(context)
                    .setSmallIcon(R.drawable.icon)
                    .setContentTitle(title)
                    .setContentText(message)
                    .setStyle(new NotificationCompat.BigTextStyle()
                            .bigText(message))
                    .addAction(0, "View", contentIntent)
                    .setAutoCancel(true)
                    .setDefaults(new NotificationCompat().DEFAULT_VIBRATE)
                    .setSound(Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.whistle));

    mBuilder.setContentIntent(contentIntent);

    mNotifM.notify(NOTIFICATION_ID, mBuilder.build());
}
}

Ответ 2

В конце этого учебника объясняется, как воспроизводить пользовательские звуки в push-уведомлениях.

Это делается с использованием этой строки:

 notification.sound = Uri.parse("android.resource://" + context.getPackageName() + "your_sound_file_name.mp3");

Ответ 3

Другой вариант обеспечения звука без необходимости генерировать собственное уведомление - просто добавить звук к уведомлению, которое Parse уже создает для вас следующим образом:

public class MyParsePushBroadcastReceiver extends ParsePushBroadcastReceiver {

   @Override
    protected Notification getNotification(Context context, Intent intent) {
        Notification n = super.getNotification(context, intent);
        n.sound = Uri.parse("android.resource://" + context.getPackageName() + "/some_sound.mp3");
        return n;
    }
}