国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android之 集成音視頻通話

這篇具有很好參考價(jià)值的文章主要介紹了Android之 集成音視頻通話。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一,背景

1.1 最近接收一個(gè)即時(shí)通訊二開(kāi)項(xiàng)目,即時(shí)通訊部分用的XMPP協(xié)議,音視頻則是集成的國(guó)外的開(kāi)源免費(fèi)庫(kù)jitsi-meet-sdk-2.4.0-4.aar,是基于WebRTC的開(kāi)源框架。但客戶(hù)想要微信那種頁(yè)面的排版,后來(lái)經(jīng)研究jitsi是不能修改UI的,UI部分是用混合框架ReactNative寫(xiě)的,這樣難度就大了,于是給了客戶(hù)兩套方案

方案一:繼續(xù)使用jitsi-meet,這個(gè)就要重新下載完整源碼,修改ReactNative,重新編譯,然后上傳私有倉(cāng)庫(kù),打包庫(kù),再引入使用

方案二:另找一套可以修改UI的SDK,音視頻相關(guān)SDK確實(shí)不少,但免費(fèi)又能修改UI的就不好找了,后來(lái)客戶(hù)同意用收費(fèi)的,那就找下吧。

1.2??音視頻通話框架整理

Jitsi?
Jitsi是一個(gè)開(kāi)源的,安全(ZRTP加密),高質(zhì)量的SIP/XMPP視頻通話、會(huì)議、聊天、桌面共享、文件傳傳輸??梢园惭b在你喜歡的操作系統(tǒng)中并且支持多種IM網(wǎng)絡(luò)。
官方網(wǎng)站:https://jitsi.org/
總結(jié):UI部分是用ReactNative 混合框架寫(xiě)的,改動(dòng)難度大,第一步需要下載完整源碼,第二部需要編譯成功,第三步修改ReactNative UI源碼 ?第四步需要上傳倉(cāng)庫(kù) 第五步引用私服倉(cāng)庫(kù)庫(kù)

https://github.com/jitsi/jitsi-maven-repository/tree/master/releases/org/jitsi/react/jitsi-meet-sdk
https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-android-sdk/
https://www.linuxrumen.com/rmxx/1794.html
https://github.com/jitsi/jitsi-meet-sdk-samples
https://jitsi.org/jitsi-meet/
https://jitsi.github.io/handbook/docs/releases
https://blog.csdn.net/heibai110/article/details/119153517


SIPDroid?
SIPDroid 是開(kāi)源的,sip協(xié)議棧使用JAVA實(shí)現(xiàn),音頻Codec使用skype的silk(Silk編解碼是Skype向第三方開(kāi)發(fā)人員和硬件制造商提供免版稅認(rèn)證(RF)的Silk寬帶音頻編碼器)實(shí)現(xiàn)。NAT傳輸支持stun server.
官方網(wǎng)站:www.sipdroid.org/


Linphone
Linphone是一種開(kāi)源的IP語(yǔ)音電話(或SIP電話),可以通過(guò)互聯(lián)網(wǎng)與人們進(jìn)行免費(fèi)的語(yǔ)音,視頻和文本即時(shí)通訊。它使用SIP協(xié)議(互聯(lián)網(wǎng)電話的開(kāi)放標(biāo)準(zhǔn)),可以與任何SIP VoIP運(yùn)營(yíng)商一起使用,包括一些免費(fèi)的SIP音頻/視頻服務(wù)。
官方網(wǎng)站:www.linphone.org/


Imsdroid
基于doubango(Doubango 是一個(gè)基于3GPP IMS/RCS 并能用于嵌入式和桌面系統(tǒng)的開(kāi)源框架。該框架使用ANSCI-C編寫(xiě),具有很好的可移植性。并且已經(jīng)被設(shè)計(jì)成非常輕便且能有效的工作在低內(nèi)存和低處理能力的嵌入式系統(tǒng)上。蘋(píng)果系統(tǒng)上的idoubs功能就是基于此框架編寫(xiě)) .音視頻編碼格式大部分都支持(H264(video),VP8(video),iLBC(audio),PCMA,PCMU,G722,G729)。NAT支持ICE(stun+turn)
官方網(wǎng)站:https://github.com/DoubangoTelecom/imsdroid ? ? http://www.doubango.org/


openfire
openfire是開(kāi)源的、基于可拓展通訊和表示協(xié)議(XMPP)、采用Java編程語(yǔ)言開(kāi)發(fā)的實(shí)時(shí)協(xié)作服務(wù)器。 Openfire安裝和使用都非常簡(jiǎn)單,并利用Web進(jìn)行管理。單臺(tái)服務(wù)器可支持上萬(wàn)并發(fā)用戶(hù)。
官方網(wǎng)站:http://www.igniterealtime.org/projects/openfire/


WebRTC
WebRTC,名稱(chēng)源自網(wǎng)頁(yè)實(shí)時(shí)通信(Web Real-Time Communication)的縮寫(xiě),是一個(gè)支持網(wǎng)頁(yè)瀏覽器進(jìn)行實(shí)時(shí)語(yǔ)音對(duì)話或視頻對(duì)話的技術(shù)?,F(xiàn)在許多SDK都是使用WebRTC作為框架來(lái)實(shí)現(xiàn)。
官方網(wǎng)站: https://webrtc.org/

1.3??音視頻通話SDK整理

AnyChat
視頻模塊是否獨(dú)立: 是
Demo測(cè)試詳情: 偶有馬賽克以及聲音有爆音
接入此SDK的其他廠商:一些銀行,證券,PADROBOTD等
價(jià)格:標(biāo)準(zhǔn)版:6800元/平臺(tái) * N 企業(yè)版:36800元/平臺(tái) * N 旗艦版:56800元/平臺(tái) * N
并發(fā):標(biāo)準(zhǔn)版:1980元/并發(fā) * M 高版:9000元/并發(fā) * M 服務(wù)器 618000元/臺(tái)
官網(wǎng): http://www.anychat.cn/
總結(jié):比較龐大,價(jià)格也貴,服務(wù)器和客戶(hù)端得一起用


JusTalk Cloud
視頻模塊是否獨(dú)立: 是
Demo測(cè)試詳情:效果較好,略有延遲
接入此SDK的其他廠商:360兒童機(jī)器人,360手表,春雨醫(yī)生等
價(jià)格:一對(duì)一視頻 0.039元 / 分鐘
官網(wǎng): http://www.justalkcloud.com/
總結(jié):整體較好,可以修改UI,也能單獨(dú)集成一對(duì)一,一對(duì)多,視頻SDK

融云
視頻模塊是否獨(dú)立: 否
Demo測(cè)試詳情:效果一般般,偶爾卡頓
接入此SDK的其他廠商:悅跑,途家,優(yōu)信等
價(jià)格:360P以下:0.008元/分鐘 720P及以下:0.030元/分鐘 720P以上:0.11元/分鐘
官網(wǎng): http://www.rongcloud.cn/ ?
文檔: https://docs.rongcloud.cn/v3/views/rtc/call/ui/quick-start/android.html
總結(jié):雖然不能單獨(dú)集成,需要和IM基礎(chǔ)庫(kù)一起集成,但可以修改UI,也是不錯(cuò)的選擇

QCloud
視頻模塊是否獨(dú)立: 否
Demo測(cè)試詳情:業(yè)界主流,效果較好,云服務(wù)穩(wěn)定,集成相對(duì)于其他獨(dú)立的稍稍麻煩些。
接入此SDK的其他廠商:
價(jià)格:日活少于10萬(wàn)免費(fèi)(需與客服詢(xún)問(wèn))
官網(wǎng): http://www.qcloud.com

環(huán)信
視頻模塊是否獨(dú)立: 否
Demo測(cè)試詳情:偶爾有馬賽克,比較普通
接入此SDK的其他廠商:獵聘等一些APP
價(jià)格:社區(qū)版(免費(fèi)):0.023元/分鐘 ? 企業(yè)版(收費(fèi)):0.020元/分鐘
官網(wǎng): http://www.easemob.com

網(wǎng)易云信
視頻模塊是否獨(dú)立: 否
Demo測(cè)試詳情:效果還行。
接入此SDK的其他廠商:科大訊飛、新東方、網(wǎng)易產(chǎn)品等
價(jià)格:功能費(fèi) 1000 / 月 (1000分鐘) + 0.025/分鐘
官網(wǎng): http://www.netease.im

agora.io 聲網(wǎng)
視頻模塊是否獨(dú)立: 是
Demo測(cè)試詳情:主流的某些直播平臺(tái)使用此SDK,效果較好,基本無(wú)卡頓
接入此SDK的其他廠商:小米,陌陌,途牛,樂(lè)視等
價(jià)格:360P以下:0.00099美元/分鐘 720P及以下:0.00399美元/分鐘 720P以上:0.01499美元/分鐘
官網(wǎng): http://cn.agora.io
總結(jié):不能修改UI,想修改UI的可以放棄

容聯(lián)云通信
視頻模塊是否獨(dú)立: 是
Demo測(cè)試詳情:易斷開(kāi),連接上后有時(shí)卡頓,且視頻質(zhì)量模糊,效果不太好
接入此SDK的其他廠商:小米,百合
價(jià)格:免費(fèi)
官網(wǎng): http://www.yuntongxun.com/?
總結(jié):沒(méi)找到下載SDK地方,但文檔給出修改UI方法是,引入遠(yuǎn)程插件,覆蓋activity


1.4 總結(jié):

  • 考慮單獨(dú)集成和UI可修改方面推薦JusTalkCloud,融云,和Jits這三個(gè)。JusTalkCloud可以單獨(dú)集成并且修改UI,融云需要和基礎(chǔ)IM庫(kù)一起集成,也可以修改UI,Jitsi免費(fèi),是不能修改UI的,真要修改,得編譯源碼,難度比較大
  • 融云雖然要和基礎(chǔ)通訊庫(kù)一起集成(imlib,imkit,calllib,callkit),但其它單獨(dú)繼承的庫(kù)流程是一樣的,也要先注冊(cè)賬號(hào),獲取token才能使用。

二,融云音視頻SDK的集成

2.1 集成融云音視頻,需要同時(shí)集成imlib,imkit,calllib,callkit

dependencies {
    implementation 'cn.rongcloud.sdk:im_lib:5.4.0.2' // 即時(shí)通訊基礎(chǔ)能力庫(kù)
    implementation 'cn.rongcloud.sdk:im_kit:5.4.0.2' // 即時(shí)通訊 UI 基礎(chǔ)組件
    implementation 'cn.rongcloud.sdk:call_lib:5.4.0' // 音視頻呼叫能力庫(kù)(內(nèi)含 rtc_lib)
    implementation 'cn.rongcloud.sdk:call_kit:5.4.0' // 音視頻通話能力 UI 組件
}

與老項(xiàng)目庫(kù)可能會(huì)沖突,為了兼容老項(xiàng)目,可以本地集成

android sip視頻通話,android,音視頻

?imkit庫(kù)下面的引用

dependencies {
    api fileTree(dir: 'libs', include: ['*.jar'])
    api 'cn.rongcloud.sdk:im_lib:5.4.0'
    implementation 'com.github.bumptech.glide:glide:4.11.0'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.fragment:fragment:1.2.5'
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
    implementation "androidx.viewpager2:viewpager2:1.1.0-alpha01"
    implementation "androidx.documentfile:documentfile:1.0.1"
    implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
    implementation "androidx.room:room-runtime:2.0.0"
    annotationProcessor "androidx.room:room-compiler:2.0.0"
}

?callkit庫(kù)下面的引用

dependencies {
    api fileTree(dir: 'libs', include: ['*.jar'])
    api project(':imkit')
    api 'cn.rongcloud.sdk:call_lib:5.4.0'
}

沖突一:glide版本沖突

統(tǒng)一下版本,統(tǒng)一用高版本,但老項(xiàng)目得做兼容,把老的glide相關(guān)代碼替換為新的glide支持

沖突二:androidx.lifecycle版本沖突,可以排除沖突的庫(kù)

implementation ('cn.rongcloud.sdk:im_kit:5.4.0')
{
   exclude group: 'androidx.lifecycle', module: 'lifecycle-runtime'
   exclude group: 'androidx.room', module: 'room-runtime'
}

沖突三:資源沖突,aapt這種也基本上是存在不同版本的庫(kù)

android sip視頻通話,android,音視頻

?定位沖突的地方,統(tǒng)一版本

android sip視頻通話,android,音視頻

?三,融云音視頻配置

3.1 初始化

RongIM.init(this, appKey);

這個(gè)地方要注意,要用IMKit庫(kù)初始化,不能用IMLib初始化,不然頁(yè)面顯示方面會(huì)有問(wèn)題,音視頻黑屏沒(méi)畫(huà)面

//RongIMClient.init(this, appKey);

3.2 獲取token

使用融云要先獲取token,連接上融云服務(wù)后才能使用聊天功能,測(cè)試的話可以在融云平臺(tái)生成臨時(shí)token,正式需要后端接口配合。

android sip視頻通話,android,音視頻

?3.3 連接融云

//連接融云
RongIMClient.connect(token, new RongIMClient.ConnectCallback() {
     @Override
     public void onSuccess(String userId) {

     }

     @Override
     public void onError(RongIMClient.ConnectionErrorCode e) {
               
      }

     @Override
     public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus code) {
                
     }
});

3.4 連接成功之后同步用戶(hù)信息

//同步用戶(hù)信息,用于展示頭像昵稱(chēng)
RongIM.setUserInfoProvider(new UserDataProvider.UserInfoProvider() {
    @Override
    public UserInfo getUserInfo(String userId) {
          if(userId.equals(coreManager.getSelf().getUserId())){
              //同步方式同步信息
              String name = CoreManager.getSelf(MainActivity.this).getNickName();
              String portraitUri = 
              AvatarHelper.getAvatarUrl(coreManager.getSelf().getUserId(), true);
              UserInfo userInfo = new UserInfo(userId, name, Uri.parse(portraitUri));
              return userInfo;
              }else {
                 //異步方式同步用戶(hù)信息,調(diào)取接口刷新本地用戶(hù)緩存
                 getOtherUserInfo(userId);
                 return null;
               }
             }
}, true);

刷新用戶(hù)緩存

User user = result.getData();
String name = user.getNickName();
String portraitUri = AvatarHelper.getAvatarUrl(user.getUserId(), true);
UserInfo userInfo = new UserInfo(user.getUserId(), name, Uri.parse(portraitUri));
RongUserInfoManager.getInstance().refreshUserInfoCache(userInfo);

3.5 調(diào)起語(yǔ)音通話

RongCallKit.startSingleCall(this, mFriend.getUserId(), RongCallKit.CallMediaType.CALL_MEDIA_TYPE_AUDIO);

3.6 監(jiān)聽(tīng)語(yǔ)音通話文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-662273.html

//監(jiān)聽(tīng)語(yǔ)音通話狀態(tài)
RongCallKit.setCustomerHandlerListener(new RongCallCustomerHandlerListener() {
     @Override
     public List<String> handleActivityResult(int requestCode, int resultCode, Intent data) {
        return null;
      }

     @Override
     public void addMember(Context context, ArrayList<String> currentMemberIds) {
     }

     @Override
     public void onRemoteUserInvited(String userId, RongCallCommon.CallMediaType mediaType) {
     }

     @Override
     public void onCallConnected(RongCallSession callSession, SurfaceView localVideo) {
     }

     /**
      * 通話結(jié)束。
      * 通話中,對(duì)方掛斷,己方掛斷,或者通話過(guò)程網(wǎng)絡(luò)異常造成的通話中斷,都會(huì)回調(diào) 
      *
      * @param callSession 通話實(shí)體。
      * @param reason      通話中斷原因。
      */
      @Override
      public void onCallDisconnected(RongCallSession callSession, RongCallCommon.CallDisconnectedReason reason) {
       if(callSession.getSelfUserId().equals(callSession.getCallerUserId())) {
             //通話時(shí)長(zhǎng)
             int longTime=(int) (callSession.getEndTime() - callSession.getStartTime()) / 1000;
             if (callSession.getEndTime()>0){
                 //掛斷通話
              }else {
                 //取消通話

              }
        }
     }

     @Override
     public void onCallMissed(RongCallSession callSession, RongCallCommon.CallDisconnectedReason reason) {
     }
});

到了這里,關(guān)于Android之 集成音視頻通話的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • WebRTC音視頻通話-實(shí)現(xiàn)iOS端調(diào)用ossrs視頻通話服務(wù)

    WebRTC音視頻通話-實(shí)現(xiàn)iOS端調(diào)用ossrs視頻通話服務(wù)

    WebRTC音視頻通話-實(shí)現(xiàn)iOS端調(diào)用ossrs視頻通話服務(wù) 之前搭建ossrs服務(wù),可以查看:https://blog.csdn.net/gloryFlow/article/details/132257196 這里iOS端使用GoogleWebRTC聯(lián)調(diào)ossrs實(shí)現(xiàn)視頻通話功能。 iOS端端效果圖 ossrs效果圖 WebRTC (Web Real-Time Communications) 是一項(xiàng)實(shí)時(shí)通訊技術(shù),它允許網(wǎng)絡(luò)應(yīng)用或者站

    2024年02月13日
    瀏覽(37)
  • Android音視頻-MediaCodec

    Android音視頻-MediaCodec

    原文:https://mp.weixin.qq.com/s?__biz=MzU3NTA3MDU1OQ==mid=2247484865idx=1sn=174b8ca702466e83e72c7115d91b06eachksm=fd298df1ca5e04e7b2df9dc9f21e5cfe3e910204c905d8605f648ce6f6404432a83ae52a23a3scene=178cur_album_id=1638784435628064770#rd MediaCodec 支持處理三種數(shù)據(jù)類(lèi)型,分別是壓縮數(shù)據(jù)(compressed data)、原始音頻數(shù)據(jù)(raw audio d

    2023年04月08日
    瀏覽(16)
  • Android音視頻編碼(2)

    Android音視頻編碼(2)

    Android本身提供了音視頻編解碼工具,很多時(shí)候是不需要第三方工具的,比如 ffmpeg , OpenCV 等,在android中引入第三庫(kù)比較復(fù)雜,在Android音視頻編碼中介紹了如何引入第三方庫(kù)libpng來(lái)進(jìn)行進(jìn)行圖片處理,同時(shí)引入這些第三方庫(kù),是程序結(jié)構(gòu)變得復(fù)雜。 本文介紹的音視頻編解碼利

    2024年01月17日
    瀏覽(22)
  • Android 音視頻開(kāi)發(fā) - VideoView

    本篇文章主要介紹下Android 中的VideoView. VideoView是一個(gè)用于播放視頻的視圖組件,可以方便地在應(yīng)用程序中播放本地或網(wǎng)絡(luò)上的視頻文件。 VideoView可以直接在布局文件中使用,也可以在代碼中動(dòng)態(tài)創(chuàng)建。 它封裝了MediaPlayer和SurfaceView,提供了簡(jiǎn)單的接口來(lái)控制視頻的播放和顯示

    2024年04月08日
    瀏覽(27)
  • Android音視頻: 引入FFmpeg

    Android音視頻: 引入FFmpeg

    本文你可以了解到 本文將介紹如何將上一篇文章編譯出來(lái)的? FFmpeg so ?庫(kù),引入到? Android ?工程中,并驗(yàn)證? so ?是否可以正常使用。 一、開(kāi)啟 Android 原生 C/C++ 支持 在過(guò)去,通常使用? makefile ?的方式在項(xiàng)目中引入? C/C++ ?代碼支持,隨著? Android Studio ?的普及, makefile ?的

    2024年02月02日
    瀏覽(27)
  • Android音視頻之協(xié)議介紹

    Android音視頻之協(xié)議介紹

    本文對(duì)音視頻的協(xié)議起源做詳細(xì)介紹,學(xué)習(xí)之后可以加深對(duì)音視頻知識(shí)的了解。 這里的音視頻不僅針對(duì)Android平臺(tái),其他平臺(tái)也通用。 一般是指以某種格式封裝了音視頻數(shù)據(jù)的文件 常見(jiàn)的音頻格式:mp3、wma、avi、rm、rmvb、flv、mpg、mov、mkv等。 常見(jiàn)的視頻格式:rmvb、rm、wmv、

    2023年04月19日
    瀏覽(21)
  • 音視頻實(shí)時(shí)通話解決方案

    音視頻實(shí)時(shí)通話解決方案

    想要實(shí)現(xiàn)音視頻通話,對(duì)于大部分人可能會(huì)覺(jué)得很難,但是實(shí)際上,有些事情并沒(méi)有大家想的那樣困難,只要功夫深,鐵杵磨成針。 機(jī)緣巧合下,在業(yè)務(wù)中,我也遇到了一個(gè)業(yè)務(wù)場(chǎng)景需要實(shí)現(xiàn)音視頻通話,我們不可能自己從零開(kāi)始干,我本次用到的核心是WebRTC。 WebRTC (Web R

    2024年02月12日
    瀏覽(23)
  • 精選58道——Android 音視頻面試題_安卓音視頻面試題(3)

    精選58道——Android 音視頻面試題_安卓音視頻面試題(3)

    先自我介紹一下,小編浙江大學(xué)畢業(yè),去過(guò)華為、字節(jié)跳動(dòng)等大廠,目前阿里P7 深知大多數(shù)程序員,想要提升技能,往往是自己摸索成長(zhǎng),但自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前! 因此收集整理了一份《2024年最新Android移動(dòng)開(kāi)發(fā)全套學(xué)習(xí)資

    2024年04月28日
    瀏覽(34)
  • 5G時(shí)代下,Android音視頻強(qiáng)勢(shì)崛起,我們?cè)撊绾慰焖偃腴T(mén)音視頻技術(shù)?

    5G時(shí)代下,Android音視頻強(qiáng)勢(shì)崛起,我們?cè)撊绾慰焖偃腴T(mén)音視頻技術(shù)?

    作為Android開(kāi)發(fā)者的我們到底應(yīng)不應(yīng)該上音視頻這條船? 接下來(lái)一起分析下。 大趨勢(shì) 從未來(lái)的大趨勢(shì)來(lái)看,隨著5G時(shí)代的到來(lái),音視頻慢慢變成人們?nèi)粘I钪械谋匦杵?。除了在線教育、音視頻會(huì)議、即時(shí)通訊這些必須使用音視頻技術(shù)的產(chǎn)品外,其它的產(chǎn)品也需要加入音頻、

    2024年04月15日
    瀏覽(28)
  • Android音視頻開(kāi)發(fā) - MediaMetadataRetriever 相關(guān)

    MediaMetadataRetriever 是android中用于從媒體文件中提取元數(shù)據(jù)新的類(lèi). 可以獲取音頻,視頻和圖像文件的各種信息,如時(shí)長(zhǎng),標(biāo)題,封面等. 需要申請(qǐng) 讀寫(xiě)權(quán)限 . 這里我使用的是本地路徑, 需要注意的是如果路徑文件不存在,會(huì)拋出 IllegalArgumentException,具體的源碼如下: 根據(jù)keyCode返回keyC

    2024年04月08日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包