1. 程式人生 > >android 傳送簡訊sendTextMessage()真機執行報錯,退出,在已申請SEND_SMS許可權的情況下Android send SMS not working uid 。。。

android 傳送簡訊sendTextMessage()真機執行報錯,退出,在已申請SEND_SMS許可權的情況下Android send SMS not working uid 。。。

最近想做一個自動傳送簡訊獲取密碼的app ,因為大學裡的電信網 要24小時換一次密碼,每次手動發簡訊去要密碼很煩有沒有~~

說明:Android 6.0 之前我們申請許可權直接在配置檔案中配置一下即可,但是6.0之後,
谷歌官方將許可權分為普通許可權和危險許可權。對於危險許可權來說,就需要進行動態設定了

先說答案,大佬一看就懂的———— 用執行時許可權的申請方法!!! (動態許可權申請,叫慣了執行時許可權。。見怪~)

我的理解:跟android的API 有關,對於SEND_SMS這類危險許可權,要用**執行時許可權**讓使用者授權,然後就能傳送了,這可能是google為了讓使用者擁有更大權利

,而不是開發人員。

大佬下面不用看了,不要來笑話我了,然後我開始講故事了。。。

(就是那個好像叫 “閃訊” 的玩意兒。。。)你們可以體會了吧

然後瘋狂找網上的程式碼,大致明白這個android 怎麼呼叫系統的介面直接傳送簡訊了,然後,我的問題就出現—— 

也就是這一行程式碼實現了傳送簡訊的功能,他執行到真機上之後一直報錯。。。。

smsManager.sendTextMessage(phoneNumber, null, text, sentPI, deliverPI);

大概報錯是這個樣子的:

說明沒有獲取許可權啊,然後我就網上查資料,都說是沒申明許可權。。

,而我已經在manifest裡面聲明瞭許可權:

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

這個android 6.0 宣告這個許可權就行了。

android8.0 的另一臺手機還要一個許可權:

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

解決方法:

我想啊,網上都這麼說,到我這兒沒用了,可能是時代發展了的問題,舊時代的方法不適合新時代問題的解決啊。。

然後我就想起了我在學的 《android第一行程式碼》 裡面申請許可權的另一種方式——執行時申請許可權 !!!

 知識點啊。。

查了一下stackoverflow

他所說的api-23 之後的方法不就是 執行時申請許可權嗎,這個東西就是你裝的時候不要許可權,然後用到了再申請的那個,相信大家都碰到過。

也是差不多的意思

然後真的這麼做了 在oncreate裡面檢查:

if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.SEND_SMS)!=
                PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{
                    Manifest.permission.SEND_SMS},1);
        }

外面一個過載函式,得到使用者是否同意了

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch(requestCode){
            case 1:
                if(grantResults.length>0&&grantResults[0]!=PackageManager.PERMISSION_GRANTED){
                    showToast("拒絕許可權將無法使用程式");
                    finish();
                }
                break;
            default:
                break;
        }
    }

再執行:

 然後因為還在測試看看行不行,這裡給 10086 發了個 “查詢餘額”    (不要錢的查詢話費用的)

然後他就會自己傳送:

給你們看我少的可憐的話費好了,然後程式碼還在寫的 ,我的想法是讓他 自己 24小時之後發 mm 到那個號碼獲取到密碼,然後在顯示在主介面上, 程式碼我就不放出來了,做好 一定放上來,  持續更新中。。。功成之日即是裝X之時 

app是早就做好了,然後陸陸續續有一些事情,之前答應更新的,這個週五的夜晚來還債啊。。

由於這個部落格是解決標題上的問題,我打算新開一篇寫下我做這個App的整個流程

相關推薦

android 傳送簡訊sendTextMessage執行退出申請SEND_SMS許可權情況Android send SMS not working uid

最近想做一個自動傳送簡訊獲取密碼的app ,因為大學裡的電信網 要24小時換一次密碼,每次手動發簡訊去要密碼很煩有沒有~~ 說明:Android 6.0 之前我們申請許可權直接在配置檔案中配置一下即可,但是6.0之後, 谷歌官方將許可權分為普通許可權和危險許可權。對

【REACT NATIVE 系列教程之十】執行COMMAND /BIN/SH FAILED WITH EXIT CODE 1 的解決方法

Himi最近在真機執行遇到  Command /bin/sh failed with exit code 1  的錯誤, 模擬器執行沒有任何問題。此問題已解決,這裡分享下解決方案。先來看下錯誤日誌,如下圖:主要是劃線的部分:1.PhaseScriptExecution Bundle\ React\ Nativ

修改專案APP名字後執行:The provisioning profile specified in your build settings (“haotian”) has an AppI

錯誤提醒:The provisioning profile specified in your build settings (“haotian”) has an AppID of “com.basecom.vipose” which does not match your

Xcode執行linker command failed with exit code 1 (use -v to see invocation)

Xcode8.2.1真機執行報錯linker command failed with exit code 1 (use -v to see invocation),用模擬器執行就不報錯。 解決方法

React Native 執行調(Android 篇)

跟著官方教程擼完一個電影列表的demo,就想配置到真機上看看效果,這裡列一些遇到的坑。 bug: SDK location not found. 具體的錯誤資訊: Building and instal

cocos2dx 3.12在android studio上從配置到執行

官網的配置連結:   好吧,有人肯定說著官網不是有很好的配置文件嗎,照著弄不就好了,要你何用?曾幾何時我也像這麼單純,然後就是各種悲劇,配置過程中出現了不少問題,導致走了很多彎路,這裡主要就是把其中遇到的彎路備份下來,免得下次配置的時候又出現同樣的問題。   首先是Ja

react native for android 除錯

鼓搗了一個星期的react native for android ,搭建了一個星期,終於運行了,在虛擬機器上。可是在真機上報錯,後來諮詢了別人說是要調成一樣的IP,還是不會改,在網上各種搜,終於搜到了

關於Android studio連線也沒反應

問題 手機連線上不報錯,電腦顯示連上,studio沒反應;網上說的都試過,沒效果。 解決 進入電腦的裝置管理,顯示android這個裝置是黃色感嘆號,證明驅動有問題,點選詳情是: 目前,這個硬體裝置沒有連線到計算機。 (程式碼 45)

react-native 安卓執行 Execution failed for task ':app:installDebug'.

解決辦法  1.重新啟動usb除錯 2.在AndroidManifest.xml中加 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  <us

Xcode 除錯:This application's application-identifier entitleme

Xcode 真機除錯報錯:This application's application-identifier entitleme This application's application-identifier entitlement does not matc

Swift專案除錯dyld: Library not loaded: @rpath/libswiftCore.dylib

使用Xcode7.3 真機執行 swift 專案的時候報錯: dyld: Library not loaded: @rpath/libswiftCore.dylib Referenced from: /var/containers/Bundle/Application

除錯error ==Error Domain=NSURLErrorDomain Code=-1009 "似乎斷開與網際網路的連線"

真機除錯報錯error ==Error Domain=NSURLErrorDomain Code=-1009 "似乎已斷開與網際網路的連線。" 請注意,錯誤程式碼是-1009,網上關於網路連結查詢錯誤程式碼的網站很多,查詢一下,會發現 -1009 kCFURLErrorN

react-native 安卓執行 Execution failed for task ':app:installDebug'.

解決辦法  1.重新啟動usb除錯 2.在AndroidManifest.xml中加 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  <uses

DeepIn 微信開發者工具除錯提示 Error: node-sync-ipc is broken.

# apt-get install wine     //  需要安裝wine, 

Android ——使用AVD模擬器和執行Hello World程式

Android——使用AVD模擬器和真機執行Hello World程式(二) 轉自:https://blog.csdn.net/tangjie134/article/details/79495204 在此部分之前我們已經成功安裝了AS3.0,並建立了一個Helloworld工程。 看到這

Android第一天——使用AVD模擬器和執行Hello World程式

在此部分之前我們已經成功安裝了AS3.0,並建立了一個Helloworld工程。 看到這樣一段話的同學請直接跳到第2步。     1.解決專案錯誤 在上一期我們建立了HelloWorld專案,但是可能會有部分同學構建出錯,導致專案無法執行,原因可能有很多,在這裡我只

使用AVD模擬器和執行Hello World程式

在此部分之前我們已經成功安裝了AS3.0,並建立了一個Helloworld工程。 看到這樣一段話的同學請直接跳到第2步。     1.解決專案錯誤 在上一期我們建立了HelloWorld專案,但是可能會有部分同學構建出錯,導致專案無法執行,原因可能有很多,在這裡我只

寒假無聊 開啟小專案 http伺服器之二傳送http請求http客戶

目錄 說明 實驗環境 建立tcp 連線 程式碼 說明 通過上一篇部落格, 我們基本瞭解了http伺服器的工作流程,首先客戶機和伺服器建立TCP連線 ,連線建立以後,客戶機發出http請求,伺服器做出響應。所以

wampserver 2無法訪問localhost的問題手機測試電腦上的本地網頁

這個網上有很多解決辦法,WampServer2.2和WampServer2.4都有解決辦法,寫得也還是不錯的那既然已經有寫得不錯的了,按理說我就沒必要再多次一舉,但我為什麼還是要再寫出來呢?因為我按照上面的做了,但是當我在手機上輸入電腦的ip的時候,瀏覽器總是顯示:無法開啟網

iOS 給測試人員測試手機APP的四種方法:執行打ipa包testFlighe郵件,蒲公英打ipa包

APP上線前測試,無外乎 一:用資料線真機除錯(以前需要下載真機除錯證書) 二:打.ipa包給測試人員(上限100人)     2.1 打包APP的.ipa 包給測試人員之前,如果沒有新增裝置的UDID號, 先進入蘋果開發者中心(添加了直接跳到2.6)  2.2點