一、問題:
之前寫的一款安卓4.4的應用程序,用來連接藍牙BLE,而現在拿出來用新的AS編譯(此時SDK為6.0,手機也是6.0)應用程序並不能搜索到藍牙,查看log總是報權限錯誤:
Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission...
二、解決過程:
但是,我把相應的權限加入manifest.xml仍然報這個錯誤,最終查到這個資料:
http://www.open-open.com/lib/view/open1445671646351.html
說明我用6.0編譯可能是問題所在,看到下面兼容舊版本,就SDK Manage下載個5.0SDK,
並修改build.gradle文件:
編譯之后運行沒有報錯,但是還是搜索不到藍牙設備,然后又搜到6.0系統上的藍牙服務要和位置服務都打開才能搜索!
於是打開手機上的位置服務,就能夠搜索到了!
三、反思
和一個目前正在搞安卓的伙伴討論,他“馬后炮”地說6.0權限和之前的很不相同~然后我又搜了一篇關於6.0權限的文章——
http://jijiaxin89.com/2015/08/30/Android-s-Runtime-Permission/
印證了之前的想法。確實安卓的變動性很快,我是有時候玩玩才搞兩下,平時不緊跟安卓技術潮流,所以這種奇葩的問題會讓我們這些對安卓技術忽冷忽熱的人很措不及防。網上遇到相同問題的人也很多,不過解答都很淺(只讓你在manifest中加權限),因此這里把該解決辦法分享下,僅供后人參考!