用户之声——提建议·赢好礼> HOT
本文介绍如何替换 TUICallKit 的来电铃声,来电铃声分为应用铃声离线推送铃声

一、 设置应用铃声

设置应用铃声有两种方式:替换铃声音频、调用设置铃声接口。

1.替换音频文件

如果您通过源码依赖 TUICallKit 组件,您可以替换 res\\raw 文件夹下的三个音频文件来达到替换铃声的目的:
文件名
用途
phone_dialing.mp3
发起呼叫时的铃音
phone_hangup.mp3
被挂断的铃音
phone_ringing.mp3
接到呼叫时的铃音

2.设置铃声接口

您也可以通过 setCallingBell 接口设置来电铃声。
Kotlin
Java
TUICallKit.createInstance(context).setCallingBell(filePath)
TUICallKit.createInstance(context).setCallingBell(filePath);

3. 设置静音模式

如果您不需要响铃,您可以通过 enableMuteMode 设置静音模式。
Kotlin
Java
TUICallKit.createInstance(context).enableMuteMode(true)
TUICallKit.createInstance(context).enableMuteMode(true);

二、设置离线推送铃音

离线通知铃声仅支持以下厂商自定义:华为、小米、FCM,其他厂商 OPPO、vivo、荣耀等暂不支持。
推送插件(TIMPush 推荐)
自集成推送(TUIOfflinePush)
TIMPush 提供了自定义铃声的方法,详情如下:
华为
小米
FCM(通知消息)
FCM(数据消息)
将铃音文件添加到本地 Android Studio 工程 res/raw 目录下。
调用接口 setAndroidSound() 和 setIOSSound() 接口设置铃声。
kotlin
java
val pushInfo = OfflinePushInfo()
pushInfo.title = "Mike" pushInfo.desc = "You have a new call"
pushInfo.androidSound = "phong_ring"

val params = TUICallDefine.CallParams() params.offlinePushInfo = pushInfo TUICallKit.createInstance(context).call("mike", TUICallDefine.MediaType.Video, params, callback)
TUICallDefine.OfflinePushInfo pushInfo = new TUICallDefine.CallParams().offlinePushInfo; pushInfo.setAndroidSound("phone_ring");
注意
华为推送的铃声为首次创建通知渠道时的铃声,之后再次设置其他铃声无效,若想更新铃音需卸载重装,详情参见:华为自定义铃声
将铃音文件添加到本地 Android Studio 工程 res/raw 目录下。
Android 8.0 之前,调用 setAndroidSound() 和 setIOSSound() 接口设置铃声。
Android 8.0 之后,还需要登录小米厂商控制台并创建channel并做好配置,然后在 即时通信 IM 控制台中配置 ChannelID,或在参数中配置。
val pushInfo = OfflinePushInfo()
pushInfo.title = "Mike" pushInfo.desc = "You have a new call"
pushInfo.androidSound = "phong_ring"
pushInfo.androidXiaoMiChannelID = "channelID"

val params = TUICallDefine.CallParams() params.offlinePushInfo = pushInfo TUICallKit.createInstance(context).call("mike", TUICallDefine.MediaType.Video, params, callback)

FCM自定义铃声,需要在登录之前进行配置,详情请参见 configFCMPrivateRing
TIMPushManager.getInstance().configFCMPrivateRing("fcm_push_channel", "phone_ring", true)
Android 8.0 之前,调用setAndroidSound() 和 setIOSSound() 接口设置铃声。
Android 8.0之后,FCM 需要在 即时通信 IM 控制台中配置 channelID,或在参数中配置。
val pushInfo = OfflinePushInfo()
pushInfo.title = "Mike" pushInfo.desc = "You have a new call"
pushInfo.androidSound = "phong_ring"
pushInfo.androidFCMChannelID = "fcm_push_channel"

val params = TUICallDefine.CallParams() params.offlinePushInfo = pushInfo TUICallKit.createInstance(context).call("mike", TUICallDefine.MediaType.Video, params, callback)
注意
FCM 的数据消息可以实现类似 VOIP 的通知机制,详情参见:FCM 数据消息,通知消息和数据消息可以相互切换。
FCM 自定义铃声或者设置 ChannelID 仅支持证书模式。

如果您想自定义该铃声,可以替换 tuicallkit-kt/src/main/res/raw/phone_ringing.mp3文件。
注意:
替换掉该铃声后,不论应用在前台、后台或者离线,铃声都会是替换后的铃声。
替换后其他厂商手机收到邀请后的铃声也会是替换后的铃声。
如果项目引入了 TUIOfflinePushPush 组件,需在应用启动时,调用以下方法开启离线通知自定义铃音能力。
Kotlin
Java
class DemoApplication : Application() {
override fun onCreate() {
TUIOfflinePushConfig.getInstance().isAndroidPrivateRing = true
}
}
public class DemoApplication extends Application {
@Override
public void onCreate() {
TUIOfflinePushConfig.getInstance().setAndroidPrivateRing(true);
}
}

1.华为 & APNs

调用接口 setAndroidSound() 和 setIOSSound()。
定制铃音资源文件,将铃音文件添加到本地 Android Studio 工程 res/raw 目录下。
Kotlin
Java
val pushInfo = OfflinePushInfo()
pushInfo.iosSound = "铃声名称.mp3"
pushInfo.androidSound = "铃声名称"
TUICallDefine.OfflinePushInfo pushInfo = new TUICallDefine.OfflinePushInfo();
pushInfo.setIOSSound("铃声名称.mp3");
pushInfo.setAndroidSound("铃声名称");
注意
IMSDK 6.1.2155 及以上版本支持。
华为推送消息的铃声为首次创建通知渠道时的铃声,之后再次设置其他铃声无效,若想更新自定义通知铃音需卸载重装,详细请参见:华为自定义铃声

2.小米

(1)Android 8.0 之前,调用setAndroidSound() 和 setIOSSound()。定制铃音资源文件,将铃音文件添加到工程 res/raw 目录下(参考上述华为调用)。
(2)Android 8.0 之后,还需要登录小米厂商控制台并创建channel并做好配置,其中铃音文件需要添加到本地 Android Studio 工程的 res/raw 目录下。
Kotlin
Java
val pushInfo = OfflinePushInfo()
pushInfo.iosSound = "铃声名称.mp3"
pushInfo.androidSound = "铃声名称"
pushInfo.androidXiaoMiChannelID = "厂商申请的channelID"
TUICallDefine.OfflinePushInfo pushInfo = new TUICallDefine.OfflinePushInfo();
pushInfo.setIOSSound("铃声名称.mp3");
pushInfo.setAndroidSound("铃声名称");
pushInfo.setAndroidXiaoMiChannelID("厂商申请的channelID");



注意
Android 8.0之前的方式,IMSDK 6.1.2155 及以上版本支持。
Android 8.0之后的方式,IMSDK 7.0.3754 及以上版本支持。

3.FCM

Android 8.0 之前,调用 setAndroidSound() 和 setIOSSound()。定制铃音资源文件,将铃音文件添加到工程 res/raw 目录下(参考上述华为调用)。
Android 8.0之后,FCM 需要配置 channelID 以及铃音资源,TUICallKit 引入的 tuiofflinepush 组件已经处理了自定义铃声的播放。铃音文件需要添加到您本地 Android Studio 工程的 res/raw 目录下,并指定铃音名称和 channel ID 的名称,详细请参见 PrivateConstants 类。
public class PrivateConstants {
// FCM 通道指定 channel ID
public static String fcmPushChannelId = "FCM ChannelID";
// FCM 需指定通道的推送铃音名称,与AndroidStudio 工程里 res/raw 目录中的铃音文件名一致,不需要后缀名
public static String fcmPushChannelSoundName = "铃声名称";
}
Kotlin
Java
val pushInfo = OfflinePushInfo()
pushInfo.iosSound = "铃声名称.mp3"
pushInfo.androidSound = "铃声名称"
pushInfo.androidFCMChannelID = "厂商申请的channelID"
TUICallDefine.OfflinePushInfo pushInfo = new TUICallDefine.OfflinePushInfo();
pushInfo.setIOSSound("铃声名称.mp3");
pushInfo.setAndroidSound("铃声名称");
pushInfo.setAndroidFCMChannelID("厂商申请的channelID");
注意
Android 8.0之前的方式,IMSDK 6.1.2155 及以上版本支持。
Android 8.0之后的方式,IMSDK 7.0.3754 及以上版本支持。
FCM 自定义铃声或者设置 channel id 仅支持证书模式。