Parse.com-Android自定义推送通知声音

Parse.com-Android自定义推送通知声音,android,parse-platform,google-cloud-messaging,android-notifications,Android,Parse Platform,Google Cloud Messaging,Android Notifications,我知道在安卓系统中,推送通知声音是可以定制的(在iOS上已经可以使用了) 但是,我在文档中没有看到任何引用,只看到每个iOS自定义声音 我在Parse.com论坛上看到,这样一个功能大约在一年前被要求提供,我回答说它“在桌面上” 有关于这方面的最新消息吗?如果没有“官方”支持,任何已知的解决方法都可以使其正常工作吗?在本文的最后,将解释如何在推送通知上播放自定义声音 这是使用以下行完成的: notification.sound = Uri.parse("android.resource://"

我知道在安卓系统中,推送通知声音是可以定制的(在iOS上已经可以使用了)

但是,我在文档中没有看到任何引用,只看到每个iOS自定义声音

我在Parse.com论坛上看到,这样一个功能大约在一年前被要求提供,我回答说它“在桌面上”

有关于这方面的最新消息吗?如果没有“官方”支持,任何已知的解决方法都可以使其正常工作吗?

在本文的最后,将解释如何在推送通知上播放自定义声音

这是使用以下行完成的:

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

我想出了一个解决办法。这在Parse的API中还不可用,但他们有文档说明如何扩展Parse接收器

因此,创建一个扩展ParsePushBroadcastReceiver的类,onReceive调用一个方法generateNotification并编写自定义代码来创建您自己的自定义通知。这样,就可以包含一个声音。首先,您需要将新的声音文件(exmp3)添加到resources/res文件夹中的原始目录中

顺便说一下,别忘了从清单中更改ParsePushBroadcastReceiver以反映您的新文件。例如:

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

提供声音而不必生成自己的通知的另一个选项是只向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;
    }
}

你得到这个问题的答案了吗。我也面临着同样的问题。这个解决方案有两个好处:1)它让用户和应用程序能够取消通知,因为ID是已知的;2)它不调用
super.onreceive
,这样就不会有重复,解析SDK生成的通知。@ChrisBorg我在
mNotifM.notify(notification_ID,mBuilder.build))的行中遇到错误表示通知ID无法解析为变量。我遗漏了什么?通知ID可以是任何整数。通常使用它,以便您可以在通知显示后管理该通知。在本例中,设置任何整数或生成的随机数这应该是可接受的答案,其精确性和可重用性。我正在使用PHP API发送android解析推送通知,在这种情况下怎么办?这是我自己想出的答案,我很高兴看到其他人将其作为一个工作解决方案发布。不幸的是,在我的LG G3运行棒棒糖(5.0.1),我仍然得到默认的声音。有什么想法吗?
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());
}
}
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;
    }
}