隱式Intent開啟活動踩過的坑

2021-08-21 20:32:39 字數 1421 閱讀 8782

之前學android時,隱式intent感覺挺簡單的,於是就沒有深究。最近在看第三方登陸時,突然想到隱式intent的作用,就來研究了下用法,沒想到踩了很多的坑,用了乙個上午的時間才找出問題所在。不管怎麼說,把這些問題記下來,以後少走點彎路!

1.只要你想通過intent隱式啟動活動(以活動為例),就必須在元素內新增和元素,不管你是通過setaction()和addcategory()方法設定隱式啟動還是setdata()方法啟動還是settype()方法啟動!這個血的教訓啊!!下面提供兩個錯!誤!示!例!

這個活動設定了兩個元素,所以我們有兩種隱式啟動這個activity的方法,但是第乙個元素缺少了元素,第二個元素缺少了元素,稍後我們將看到,儘管我們的**中並沒有用到setaction()方法和addcategory()方法,但這兩個子元素卻並不能省略。

首先,我們用setdata()方法隱式啟動對應第乙個,**如下:

intent intent=new intent();

intent.setdata(uri.parse("cam:"));

startactivity(intent);

執行閃退,報錯如下:

android.content.activitynotfoundexception: no activity found to handle intent

這是最坑的,異常提示的是找不到該intent對應的活動,但是我們的明明能完美對應,對著這幾行**乾瞪眼卻不知道該怎麼辦。

然後,我們用settype方法隱式啟動對應第二個,**如下:

intent intent=new intent();

intent.settype("cam/cam");

startactivity(intent);

執行結果如下:

根本沒有我們想要開啟的活動,當然,你的程式沒有報錯,但是不對,而你連問題在哪都不知道。

正確的如下:

使用上面的啟動**可以開啟這個活動(ps:本來啟動方式和錯誤方式的排列組合應該有四條的,但是結果大同小異,讀者自行實驗吧)。總之,只要你想用隱式的intent開啟活動,元素和元素必不可少!

2.只要使用隱式intent,元素中,這行**必不可少,不管你有沒有定義自己的category,原因在推薦的部落格中已經講過了,原始碼中會自動給intent新增這個category。相信這個坑很多人都踩過,就不提供錯誤示範了。

3.setdata()和settype()互相覆蓋,推薦的部落格中講的很詳細,在此略過。

暫時就這麼多,以後還有坑就再補充。

隱式活動Intent的用法

通過隱式活動可以通過乙個事件開啟乙個連線和乙個 號碼 在乙個按鈕監聽裡輸入 開啟乙個連線 intent intent new intent intent.action view intent.setdata uri.parse startactivity intent intent.action v...

顯式Intent與隱式Intent的區別

在activity的跳轉中 activity的跳轉需要建立intent物件,通過設定intent物件的引數指定要跳轉activity 通過設定activity的包名和類名實現跳轉,稱為顯式意圖 通過指定動作實現跳轉,稱為隱式意圖 顯式意圖 跳轉至同一專案下的另乙個activity,直接指定該acti...

android 隱式intent的用法 6

有了顯式意圖為什麼還要隱式intent呢,面且隱式意圖相比顯示的還不是那麼明確?後來我發現隱式intent,可能就是為啟動別的程式活動,多程式互相轉換的吧 我來啟動乙個瀏覽器 button button button findviewbyid r.id.button test button.seto...