是否可以在 android 中将音频文件作为推送通知发送?我想要做的是用户可以将他的声音录制为一条消息,然后将该消息作为推送通知传递给该应用程序的所有用户。是否可以 ?
问问题
2177 次
3 回答
4
根据以下文件,CGM / C2DM / Push Notification 只能发送 4KB 数据,因此,您不能通过推送通知发送音频文件,
http://developer.android.com/guide/google/gcm/c2dm.html “应用程序可以使用“带有有效负载的消息”来传递最大 4 Kb 的消息”
但是您可以发送任何音频文件的 http url,在移动应用程序中将通过 cgm 消息接收音频文件链接并使用 http 连接下载音频文件。
于 2012-09-14T11:23:55.237 回答
1
另一种方法是使用已经为您实现此功能的模块。从技术上讲,您执行的操作与此处描述的完全相同,但是通过对 mBlox (http://developer.mblox.com) 等提供商的单个 API 调用,您将能够发布您的内容和您想要定位的设备,内容的托管,以及到 URL 的翻译正在为您完成,以及发送实际的推送通知。
同样,从技术上讲,它与以前的答案相同,但是,对于您的个人集成,它可能是进入市场的更快方式。
于 2012-09-15T03:47:42.310 回答
0
有一种方法,我们可以在 FCM 的数据中发送音频 url。之后我们可以解析并发送到另一个活动。
在 FIREBASE 服务中
JSONObject object = null;
try {
String data = remoteMessage.getData().toString();
Map<String, String> params = remoteMessage.getData();
object = new JSONObject(params);
} catch (Exception e) {
Log.e("FCM err 1", e.getMessage());
}
sendNotification(this, remoteMessage.getNotification().getBody(), remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getClickAction(), object);
推送通知功能
public static void sendNotification(Context context, String Message, String Title, String ClickAction, JSONObject object) {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
final String CHANNEL_ID = "KRB";
if (Build.VERSION.SDK_INT >= 26) { // Build.VERSION_CODES.O
NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, "KRB_channel", NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(mChannel);
}
// intent = Home
Intent intent = new Intent(ClickAction);
try {
Log.e("FCMurl", object.getString("url"));
Log.e("FCMtype", object.getString("type"));
intent.putExtra("url", object.getString("url"));
intent.putExtra("type", object.getString("type"));
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
} catch (Exception e) {
// Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show();
Log.e("FCM err", e.getMessage());
}
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0 /* Request code */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.icon_logo)
.setColor(Color.parseColor("#531E6C")) // small icon background color
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_sfach))
.setContentTitle(Title)
.setContentText(Message)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setPriority(Notification.PRIORITY_MAX)
.setDefaults(Notification.DEFAULT_ALL)
.setContentIntent(pendingIntent);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
活动中
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String url;
if(bundle != null){
url = bundle.getString("url");
MediaPlayer mediaplayer = new MediaPlayer();
try {
mediaplayer.setDataSource(url);
mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaplayer.prepareAsync();
mediaplayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaplayer.start();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
于 2020-07-15T12:52:10.013 回答