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

时间:2014-07-02 08:32:44

标签: android parse-platform google-cloud-messaging android-notifications

我知道Android中的推送通知声音可以自定义(在iOS上已经正常工作)。

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

我在Parse.com论坛上看到大约一年前就要求提供这样的功能并回答说它是#34;在桌面上#34;。

有关这方面的任何更新?如果没有"官方"支持,任何已知的解决方法,以使其工作?

3 个答案:

答案 0 :(得分:11)

我找到了解决方案。这还不能通过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());
}
}

答案 1 :(得分:1)

在此tutorial的末尾解释了如何在推送通知中播放自定义声音。

使用此行完成:

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

答案 2 :(得分:1)

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