學習Android官方文檔(六)

一、FileProvider

前幾天學習了如何分享文字、圖片、音樂或其他流文件,那么提供讓我們選擇文件的應用,比如圖庫不僅能查看圖片還能從其他應用跳轉到圖庫去挑選圖片然后返回選擇的結果,這是如何做的呢?官方提供了 FileProvider 來幫助我們完成。

1、Manifest中聲明

<application> 標簽中聲明 <provider>,例子中的屬性必須有

說明:

(1)authorities:android:package?+ fileprovider;

(2)<mete-data> 中指出 FileProvider 允許訪問的目錄

(3)這些目錄存放在 res/xml/filepath.xml 文件中

注意:(特別感謝小愛_小世界

<file-path> 代表的根目錄:Context.getFilesDir()

<external-path> 代表的根目錄:Environment.getExternalStorageDirectory()

<cache-path> 代表的根目錄:getCacheDir()

2、選擇界面的創建-- Activity

Manifest中應該這樣聲明

說明(針對 <intent-filter>):

(1)<action>:android.Intent.action.PICK;

(2)<category>:DEFAULT 和 OPENABLE 都要有;

(3)<data>:要設置 MIME 類型。自己根據需求設置。

至于 Activity 的創建和其他沒有區別,一般是一個列表供用戶選擇。

3、選擇結果的處理及返回結果

說明:

(1)選擇文件后,會得到一個File對象,使用 FileProvider.getUriForFile(Context context,String authority,File file) 方法獲取Uri。如果該文件在不允許訪問的目錄下(filepath.xml),則會拋異常。

(2)返回結果的 Intent 要通過 addFlags(FLAG_GRANT_READ_URI_PERMISSION) 方法進行臨時授權,要設置 data 和 MIME type。

(3)使用 setResult(resultCode , intent) 將結果設置好,并 finish() 當前 Activity。

二、音頻---Audio

1、音頻簡介

Android 音頻控制是由 AudioManager 來管理,通過 getSystemService(Context.AUDIO_SERVICE) ?來獲取該服務。

音頻分為 AudioManager.STREAM_SYSTEM、AudioManager.STREAM_MUSIC、AudioManager.STREAM_RING、AudioManager.STREAM_NOTIFICATION、AudioManager.STREAM_ALARM、AudioManager.STREAM_VOICE_CALL、AudioManager.STREAM_DTMF(雙音多頻,撥號鍵的聲音)七種。

2、音量

當啟動一個新應用,要在 onCreate() 中使用 AudioManager.setVolumeControlStream(int type) 設置應用控制的音量種類。

各種音量的最大值一般都一樣(自己測試得到)。

設置音量大小兩種方法:

(1)漸進式

就是像按音量控制按鈕似的,一點一點的調節。

AudioManager.adjustStreamVolume(int streamType, int direction, int flags)

1)streamType 不介紹,同上面。

2)direction 是調整的方向:

ADJUST_LOWER?降低音量

ADJUST_RAISE?升高音量

ADJUST_SAME?保持不變,這個主要用于向用戶展示當前的音量

3)flags 兩種常見:

FLAG_PLAY_SOUND 調整音量時播放聲音

FLAG_SHOW_UI?調整時顯示音量條,就是按音量鍵出現的界面

(2)直接設置

Audiom.setStreamVolume(streamType , index , flags)

index:音量大小

3、硬件按鍵控制

無論用戶按下設備上任意一個控制按鈕,系統都會廣播一個帶有ACTION_MEDIA_BUTTON的Intent。因此使用廣播來處理這些事件。

因為可能會有多個程序在監聽與媒體按鈕相關的事件,所以我們必須在代碼中控制應用接收相關事件的時機。我們使用?AudioManager?來為我們的應用注冊監聽與取消監聽媒體按鈕事件,當Receiver被注冊上時,它將是唯一一個能夠響應媒體按鈕廣播的Receiver。

4、音頻焦點

由于可能會有多個應用可以播放音頻,所以我們應當考慮一下他們應該如何交互。為了防止多個音樂播放應用同時播放音頻,Android 使用音頻焦點(Audio Focus)來控制音頻的播放——即只有獲取到音頻焦點的應用才能夠播放音頻。

(1)處理焦點變化事件

使用 AudioManager.OnAudioFocusChangeListener,共有八種事件:

AUDIOFOCUS_GAIN:永久獲取焦點,只有手動釋放才會失去焦點;

AUDIOFOCUS_GAIN_TRANSIENT:暫時獲取焦點;

AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:暫時獲取焦點,其他音頻降低音量播放;

AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE:暫時獲取焦點,其他音頻停止播放。

對應四種失去焦點事件 AUDIOFOCUS_LOSS、AUDIOFOCUS_LOSS_TRANSIEN、AUDIOFOCUS_LOSS_TRANSIENT_MAY_DUCK、AUDIOFOCUS_LOSS_TRANSIENT_EXCLUSIVE。

疑問:

經過查閱資料和自己試驗,未發現 TRANSIENT 和 TRANSIENT_EXCLUSIVE 的區別。

如有朋友知曉,請分享,謝謝。

(2)申請音頻焦點

AudioManager.requestAudioFocus( listener , streamType , durationHint )

1)listener:OnAudioFocusChangeListener,指處理申請成功之后 AudioFocus 變化情況的Listener,因為在獲得焦點期間可能又有別的應用申請焦點。

2)streamType:音頻流類型

3)durationHint:(是 AudioManager 中的常量,有以下幾種值)

4)返回值是 AudioManager.AUDIOFOCUS_REQUEST_GAINED 或 AudioManager.AUDIOFOCUS_REQUEST_FAILED。

(3)釋放音頻焦點

abandonAudioFocus( listener )?這樣相當于告知系統我們不再需要獲取焦點并且注銷所關聯的?AudioManager.OnAudioFocusChangeListener?監聽器。

5、處理音頻輸出設備的改變

當有線耳機被拔出或者藍牙設備斷開連接的時候,音頻流會自動輸出到內置的揚聲器上。假設播放聲音很大,這個時候突然轉到揚聲器播放會顯得非常嘈雜。幸運的是,系統會在這種情況下廣播帶有?ACTION_AUDIO_BECOMING_NOISY?的 Intent,所以使用廣播來處理這些事件。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,250評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,923評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,041評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,475評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,253評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,801評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,882評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,023評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,530評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,494評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,639評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,177評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,890評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,289評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,552評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,242評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,626評論 2 370

推薦閱讀更多精彩內容

  • Media Playback Android多媒體框架包涵了對播放多種通用媒體的類型的支持,所以你可以很容易的集成...
    VegetableAD閱讀 895評論 0 0
  • ¥開啟¥ 【iAPP實現進入界面執行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,477評論 0 17
  • 因為系統中可能會有多個應用程序會播放音頻,所以需要考慮他們之間該如何交互,為了避免多個應用程序同時播放音樂,...
    ZebraWei閱讀 3,232評論 0 1
  • 流年不覺春永逝,浪蕩蕭郎鬢發蒼。 倚欄夜望無星月,清風憐我滿衣裳。 寒秋不堪久高樓,垂淚忍別東風柔。 孤盞獨酌惟欲...
    鎏某閱讀 581評論 2 3
  • 很慶幸自己在筆記里找到記錄著《塔莎奶奶的美好生活》筆錄、最深刻與到現在為止最易理解的大概就這段文字了、我們真正想要...
    陳琳琳閱讀 223評論 0 0