Android來電秀應用(一)

廢話:接了個加急項目悄蕾,要求10天完成一個類似來電秀的APP票顾,看來領導是很相信我的技術的础浮,哈哈帆调,(內心OS:尼瑪,臣妾做不到)豆同,然鵝并沒有什么用番刊,還是想想如何實現(xiàn)吧

項目步驟(技術難點拆分)

  • 設置鈴聲
  • 監(jiān)聽系統(tǒng)來電
  • 系統(tǒng)權限獲取
  • 接聽掛斷電話

設置鈴聲

設置鈴聲相對來說比較簡單,系統(tǒng)提供了相應的API影锈,獲取音頻文件的URl芹务,調用RingtoneManager的setActualDefaultRingtoneUri方法就OK,代碼如下

    public void setRingtoneImpl2(String path) {
        File chosenFile = new File(path);
        if (chosenFile == null) {
            LogUtils.e("file is null");
            return;
        }
        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, chosenFile.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, chosenFile.getName());
        values.put(MediaStore.MediaColumns.SIZE, chosenFile.length());
        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
        values.put(MediaStore.Audio.AudioColumns.IS_RINGTONE, true);
        values.put(MediaStore.Audio.AudioColumns.IS_NOTIFICATION, false);
        values.put(MediaStore.Audio.AudioColumns.IS_ALARM, false);
        values.put(MediaStore.Audio.AudioColumns.IS_MUSIC, false);
        
        Uri uri = MediaStore.Audio.Media.getContentUriForPath(chosenFile.getAbsolutePath());
        mContext.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + chosenFile.getAbsolutePath() + "\"", null);
        Uri newUri = mContext.getContentResolver().insert(uri, values);
        try {
            RingtoneManager.setActualDefaultRingtoneUri(
                    mContext,
                    RingtoneManager.TYPE_RINGTONE,
                    newUri
            );

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

哈哈鸭廷,搞定枣抱,萬事大吉,然鵝辆床。佳晶。。讼载。轿秧,還有雙卡雙待,設置不同sim卡的來電鈴音咨堤。菇篡。。What一喘?驱还??凸克?

雙卡設置不同的鈴聲

再次查看文檔發(fā)現(xiàn)Google大佬就不支持雙卡分別設置鈴聲议蟆,腫么辦。触徐。咪鲜。。撞鹉。疟丙。萬般無奈還是從源碼出發(fā)颖侄,看看能否發(fā)現(xiàn)些蛛絲馬跡,查看setActualDefaultRingtoneUri方法源碼


截屏2020-01-16下午2.37.39.png

發(fā)現(xiàn)源碼是通過修改Setting中的值來修改鈴聲享郊,那么修改卡2的鈴聲是否也可以通過這種方式呢览祖?行不行試試就知道

可以分為兩步:

  • 找到Setting的Key
  • 通過修改系統(tǒng)Setting設置鈴聲

查找Setting的Key

通過命令 adb shell getprop獲取系統(tǒng)屬性,查找與ring相關的屬性炊琉,嘿嘿展蒂,驚喜來了,下面是華為手機的prop:


截屏2020-01-16下午3.04.53.png

ringtone不就是系統(tǒng)鈴聲的Key值嗎苔咪?因此可以推測下面的ringtone2就是卡2的Key锰悼,行不行試下就知道,直接上代碼:

    public void setRingtoneImpl2(String path) {
        File chosenFile = new File(path);
        if (chosenFile == null) {
            LogUtils.e("file is null");
            return;
        }
        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, chosenFile.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, chosenFile.getName());
        values.put(MediaStore.MediaColumns.SIZE, chosenFile.length());
        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
        values.put(MediaStore.Audio.AudioColumns.IS_RINGTONE, true);
        values.put(MediaStore.Audio.AudioColumns.IS_NOTIFICATION, false);
        values.put(MediaStore.Audio.AudioColumns.IS_ALARM, false);
        values.put(MediaStore.Audio.AudioColumns.IS_MUSIC, false);

        Uri uri = MediaStore.Audio.Media.getContentUriForPath(chosenFile.getAbsolutePath());
        mContext.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + chosenFile.getAbsolutePath() + "\"", null);

        Uri newUri = mContext.getContentResolver().insert(uri, values);

        try {
            RingtoneManager.setActualDefaultRingtoneUri(
                    mContext,
                    RingtoneManager.TYPE_RINGTONE,
                    newUri
            );
           //華為手機設置卡2
            Settings.System.putString(mContext.getContentResolver(), "ringtone2", newUri.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

哈哈团赏,運行成功箕般,到此結束,設置鈴聲完美解決

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末舔清,一起剝皮案震驚了整個濱河市丝里,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌体谒,老刑警劉巖杯聚,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抒痒,居然都是意外死亡幌绍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門评汰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纷捞,“玉大人,你說我怎么就攤上這事被去≈骼埽” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵惨缆,是天一觀的道長糜值。 經常有香客問我,道長坯墨,這世上最難降的妖魔是什么寂汇? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮捣染,結果婚禮上骄瓣,老公的妹妹穿的比我還像新娘。我一直安慰自己耍攘,他們只是感情好榕栏,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布畔勤。 她就那樣靜靜地躺著,像睡著了一般扒磁。 火紅的嫁衣襯著肌膚如雪庆揪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天妨托,我揣著相機與錄音缸榛,去河邊找鬼。 笑死兰伤,一個胖子當著我的面吹牛内颗,可吹牛的內容都是我干的。 我是一名探鬼主播医清,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼起暮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了会烙?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筒捺,失蹤者是張志新(化名)和其女友劉穎柏腻,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體系吭,經...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡五嫂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了肯尺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沃缘。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖则吟,靈堂內的尸體忽然破棺而出槐臀,到底是詐尸還是另有隱情,我是刑警寧澤氓仲,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布水慨,位于F島的核電站,受9級特大地震影響敬扛,放射性物質發(fā)生泄漏晰洒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一啥箭、第九天 我趴在偏房一處隱蔽的房頂上張望谍珊。 院中可真熱鬧,春花似錦急侥、人聲如沸砌滞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽布持。三九已至豌拙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間题暖,已是汗流浹背按傅。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胧卤,地道東北人唯绍。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像枝誊,于是被迫代替她去往敵國和親况芒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容

  • 因為要結局swift3.0中引用snapKit的問題,看到一篇介紹Xcode8,swift3變化的文章,覺得很詳細...
    uniapp閱讀 4,422評論 0 12
  • 我想一次性付費叶撒,閱讀所有 Tasker 中文用戶指南哦绝骚?OK,請訪問此鏈接 原創(chuàng)內容祠够,未經本人授權不得轉載
    blackspot閱讀 1,472評論 0 1
  • feisky云計算压汪、虛擬化與Linux技術筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,866評論 0 5
  • 專業(yè)考題類型管理運行工作負責人一般作業(yè)考題內容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 9,006評論 0 13
  • 有幾點看法:1、的確是一針見血古瓤、但客觀來講止剖,這位hr所描述的在校經歷只能說985的產出幾率會更高一些、畢竟整體環(huán)境...
    濤子Teody閱讀 233評論 0 0