博客 / 詳情

返回

(原創)【B4A】Intent 獲取分享圖片的“坑”及解決辦法

一、前言

作為完全自學安卓開發的程序員,雖然開發過不少安卓項目,但是仍覺得好多“坑”啊。可能對於科班出身的安卓程序員來説是司空見慣的吧。

本次就來説一下我在處理Intent獲取分享圖片的“坑”及解決辦法。

相信看完的你,一定會有所收穫!

本文地址:https://www.cnblogs.com/lesliexin/p/19419192

二、坑1:永遠存在着的TEXT

按照我桌面開發的理所當然的經驗,我很自然而然的寫出了以下的代碼:
(注:因為這是一個幫助類,所以會同時判斷不同的類型)

點擊查看代碼
If in.HasExtra("android.intent.extra.TEXT")   Then	
'TODO,處理文本
Else If in.HasExtra("android.intent.extra.STREAM") Then
'TODO,處理圖片
Else If 

然後運行時就發現永遠不會進入第2個If塊。

打了下日誌如下:

點擊查看代碼
Bundle[{android.intent.extra.SUBJECT=, android.intent.extra.TEXT=null, org.chromium.chrome.extra.TASK_ID=5, android.intent.extra.STREAM=content://com.android.chrome.FileProvider/images/screenshot/176705590396623703724.png}]

發現問題了嗎?雖然我分享的是文件,但是“android.intent.extra.TEXT”也在。

三、坑2:此null非彼Null

知道了上面的問題,最直接的辦法就是在第一個If塊加上是否為Null的判斷:

點擊查看代碼
Dim sharedText As String
sharedText = in.GetExtra("android.intent.extra.TEXT")
If sharedText=Null Or sharedText.Length=0 Then
'TODO,取圖片判斷

我還基於經驗,判斷了下Length=0。

然後運行代碼,仍然無法進入取圖片的代碼段。

嗯?為啥?

一籌莫展之際,靈機一動,直接判斷是不是等於字符串“null”,然後不出意外的,成功了。

點擊查看代碼
If sharedText=Null Or sharedText.Length=0 Or sharedText="null" Then

啊啊啊啊…… 這是什麼搞笑的玩意兒,null竟然不是“空”,而是“null”這個字符串本身。大無語。

四、結語

本文是一個無語吐槽向的,因為很多桌面開發的經驗已經根深蒂固,導致時不時會遇到這種莫名的“坑”。

這應該屬於“知見障”了吧,修行還不夠啊。

-[END]-

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.