我知道在Android中推送通知声音可以自定义(在iOS上已经支持)。
然而,我没有在文档中看到任何相关参考,只有针对iOS的自定义声音。
我在Parse.com论坛上看到有人一年前请求这样的功能,并得到回答说“正在讨论中”。
有关此事的任何更新吗?如果没有“官方”支持,是否有任何已知的解决方法来使其工作?
我知道在Android中推送通知声音可以自定义(在iOS上已经支持)。
然而,我没有在文档中看到任何相关参考,只有针对iOS的自定义声音。
我在Parse.com论坛上看到有人一年前请求这样的功能,并得到回答说“正在讨论中”。
有关此事的任何更新吗?如果没有“官方”支持,是否有任何已知的解决方法来使其工作?
我找到了一个解决方法。虽然 Parse 的 API 还没有提供这个功能,但是他们有文档来解释如何扩展 ParsePushBroadcastReceiver。
因此,创建一个类来扩展 ParsePushBroadcastReceiver,然后在 onReceive 中调用 generateNotification 方法,并编写自定义代码以创建自己的自定义通知。这样,您可以包含一个声音。首先,您需要将新的声音文件(例如 mp3)添加到资源 / res 文件夹中的 raw 目录中。
顺便说一下,不要忘记更改清单中的 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());
}
}
notification.sound = Uri.parse("android.resource://" + context.getPackageName() + "your_sound_file_name.mp3");
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;
}
}