Android二維碼的基礎(chǔ)使用(二):保存和分享

概述

在上期文章中唤蔗,我們提到了Android二維碼的自定義生成,本期主要包含的內(nèi)容如下:

  1. 將二維碼以圖片的形式保存到指定的目錄式散。
  2. 如何調(diào)起系統(tǒng)分享實(shí)現(xiàn)二維碼分享到其他應(yīng)用烹吵。

系列文章:

Android二維碼的基礎(chǔ)使用(一):利用Zxing生成自定義二維碼
Android二維碼的基礎(chǔ)使用(二):保存和分享
Android二維碼的基礎(chǔ)使用(三):二維碼掃描Demo實(shí)現(xiàn)

一、保存至本地

要將二維碼保存到本地到指定目錄详囤,必然涉及到文件操作财骨,可以通過文件IO流保存的方式將二維碼進(jìn)行保存,同時發(fā)送廣播更新圖庫藏姐,主要步驟包括:

  1. 權(quán)限申請
  2. 文件操作隆箩。

1. 權(quán)限添加

添加文件讀寫權(quán)限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. 文件操作。

示例代碼如下:

    /**
     * 保存圖片到指定路徑
     *
     * @param bitmap   要保存的圖片
     * @param fileName 自定義圖片名稱
     * @param context
     * @return
     */
    fun saveBitmapToFile(bitmap: Bitmap?, fileName: String,context: Context?): Boolean {
        // 保存圖片至指定路徑
        if(bitmap == null)
            return false
        val storePath = FileUtils.instance.getAppDir() + QR_CODE+File.separator
        val appDir = File(storePath)
        if (!appDir.exists()) {
            appDir.mkdirs()
        }
        val file = File(appDir, fileName)
        LogUtils.instance.getLogPrint(file.absolutePath)
        try {
            val fos = FileOutputStream(file)
            //通過io流的方式來壓縮保存圖片(80代表壓縮20%)
            val isSuccess = bitmap.compress(Bitmap.CompressFormat.PNG, 80, fos)

            fos.flush()
            fos.close()

            //發(fā)送廣播通知系統(tǒng)圖庫刷新數(shù)據(jù)
            val uri: Uri = Uri.fromFile(file)
            context?.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri))

            return isSuccess
        } catch (e: IOException) {
            e.printStackTrace()
        }
        return false
    }
    
    companion object {
        public const val QR_CODE = "QRCode"
        val instance = QRCodeBitmapUtils()
    }

讀取文件時注意文件的路徑以及文件夾是否存在羔杨,否則可能會有查找不到文件的異常出現(xiàn)捌臊。

3.遇到的問題

Android 10 文件寫入錯誤

在調(diào)試過程中遇到了Android 10 文件寫入錯誤,是因?yàn)锳ndroid 10 對于文件寫入做了更加嚴(yán)格的限制兜材,遇到的具體錯誤信息如下:

new FileOutputStream(file) 時拋出異常 :FileNotFoundException

我的解決辦法是在AndroidManifest.xml文件application條目下添加了如下代碼:

android:requestLegacyExternalStorage="true"

二理澎、分享圖片

分享實(shí)現(xiàn)的方法有多種,可以通過調(diào)用系統(tǒng)分享曙寡,也可以添加調(diào)用第三方分享糠爬,在此僅采用系統(tǒng)提供的分享方法為例進(jìn)行簡單說明:

分享的情況下可以將生成的二維碼按照上面的保存方式保存起來,生成二維碼的地址以方便轉(zhuǎn)換成Uri举庶。

系統(tǒng)分享只需要通過intent傳入指定的Action执隧,再通過startActivity直接調(diào)起分享即可,示例代碼如下:

    /**
     * 分享圖片
     * @param filePath:文件路徑名稱
     * @param context
     */
    fun shareImg(filePath: String, context: Context) {
        val uri: Uri = Uri.parse(filePath)
        var intent = Intent()
        LogUtils.instance.getLogPrint("獲取文件路徑:"+uri.toString())
        intent.action = Intent.ACTION_SEND     //設(shè)置Action為分享
        intent.type = "image/*" //設(shè)置分享內(nèi)容的類型户侥,暫設(shè)定為圖片分享
        intent.putExtra(Intent.EXTRA_STREAM, uri)    //設(shè)置分享的地址
//        intent.putExtra(Intent.EXTRA_SUBJECT, "share");//添加分享內(nèi)容標(biāo)題
//        intent.putExtra(Intent.EXTRA_TEXT, "share with you:" + "android");//添加分享內(nèi)容
        intent = Intent.createChooser(intent, "分享")
        context.startActivity(intent)
    }

示例demo

demo地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镀琉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蕊唐,更是在濱河造成了極大的恐慌屋摔,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件替梨,死亡現(xiàn)場離奇詭異钓试,居然都是意外死亡署尤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門亚侠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來曹体,“玉大人,你說我怎么就攤上這事硝烂』穑” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵滞谢,是天一觀的道長串稀。 經(jīng)常有香客問我,道長狮杨,這世上最難降的妖魔是什么母截? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮橄教,結(jié)果婚禮上清寇,老公的妹妹穿的比我還像新娘。我一直安慰自己护蝶,他們只是感情好华烟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著持灰,像睡著了一般盔夜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堤魁,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天喂链,我揣著相機(jī)與錄音,去河邊找鬼妥泉。 笑死椭微,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涛漂。 我是一名探鬼主播赏表,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼检诗,長吁一口氣:“原來是場噩夢啊……” “哼匈仗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起逢慌,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤悠轩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后攻泼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體火架,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鉴象,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了何鸡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纺弊。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖骡男,靈堂內(nèi)的尸體忽然破棺而出淆游,到底是詐尸還是另有隱情,我是刑警寧澤隔盛,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布犹菱,位于F島的核電站,受9級特大地震影響吮炕,放射性物質(zhì)發(fā)生泄漏腊脱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一龙亲、第九天 我趴在偏房一處隱蔽的房頂上張望陕凹。 院中可真熱鬧,春花似錦鳄炉、人聲如沸捆姜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泥技。三九已至,卻和暖如春磕仅,著一層夾襖步出監(jiān)牢的瞬間珊豹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工榕订, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留店茶,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓劫恒,卻偏偏與公主長得像贩幻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子两嘴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容