2

是否可以在 android 中将音频文件作为推送通知发送?我想要做的是用户可以将他的声音录制为一条消息,然后将该消息作为推送通知传递给该应用程序的所有用户。是否可以 ?

4

3 回答 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 回答