0

當我使用我的手機與android棒棒糖時,我所有的功能都很好用,但是當我使用Android Marshmallow或Jelly Bean應用程序崩潰時。Apk在Lolipop上運行良好,但不在果凍豆和棉花糖上

以下爲應用模塊構建gradle這個文件:

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 23 
buildToolsVersion '23.0.1' 
defaultConfig { 
    applicationId "com.example.k.sms" 
    minSdkVersion 14 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
productFlavors { 
} 
} 

dependencies { 
compile fileTree(include: ['*.jar'], dir: 'libs') 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:appcompat-v7:23.1.1' 
} 

,這是我的logcat當我測試我的應用程序在仿真器與Android棉花糖

12-26 19:10:41.860 18000-18000/com.example.k.sms D/AndroidRuntime: Shutting down VM 
    12-26 19:10:41.860 18000-18000/com.example.k.sms E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.example.k.sms, PID: 18000 
                   java.lang.SecurityException: Sending SMS message: uid 10057 does not have android.permission.SEND_SMS. 
                    at android.os.Parcel.readException(Parcel.java:1599) 
                    at android.os.Parcel.readException(Parcel.java:1552) 
                    at com.android.internal.telephony.ISms$Stub$Proxy.sendTextForSubscriber(ISms.java:768) 
                    at android.telephony.SmsManager.sendTextMessageInternal(SmsManager.java:310) 
                    at android.telephony.SmsManager.sendTextMessage(SmsManager.java:293) 
                    at com.example.k.sms.MainActivity$3.onClick(MainActivity.java:149) 
                    at android.view.View.performClick(View.java:5198) 
                    at android.view.View$PerformClick.run(View.java:21147) 
                    at android.os.Handler.handleCallback(Handler.java:739) 
                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                    at android.os.Looper.loop(Looper.java:148) 
                    at android.app.ActivityThread.main(ActivityThread.java:5417) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+1

在運行系統中的權限解釋堆棧跟蹤說什麼? – Fllo

+0

在這裏一切似乎都很好。可能是其他問題。 –

+1

「崩潰」 - 使用LogCat檢查與您的崩潰相關的Java堆棧跟蹤:https://stackoverflow.com/questions/23353173/uncomfort-myapp-has-stopped-how-can-i-solve-this – CommonsWare

回答

3

targetSdkVersion 23

and

java.lang.SecurityException:發送SMS消息:uid 10057沒有android.permission.SEND_SMS。

看來你碰到targetSdk不知道後果。棉花糖引入了運行時權限模型,當你的目標是API23或更高版本時,它啓動運行時權限模型,你的應用程序只需要支持新的運行時權限模型,因爲清單聲明的權限在這種情況下已經不足夠了

快速解決方案是將targetSdk設置爲22(或更低),因爲只有運行時權限不會啓動。引用docs

在Android上的所有版本,應用程序需要聲明都正常 並在其應用程序清單的需要,如在聲明權限描述 危險的權限。

  • 如果設備運行的是Android 5.1或更低,或應用程式的目標 SDK是22或更低:但是, 聲明的效力取決於系統的版本和 應用程式的目標SDK級別是不同的:如果您在清單 中列出危險權限,則用戶必須在安裝 應用時授予權限;如果他們沒有授予權限,系統根本不安裝 應用程序。
  • 如果設備運行的是Android 6.0或更高版本,以及 應用程式的目標SDK爲23或更高:應用必須列出清單中的 權限,它必須要求它需要而每一個危險 許可應用正在運行。用戶可以授予或拒絕每個權限,即使用戶拒絕權限請求,該應用也可以繼續以有限的 功能運行。

如果您需要任何年長的API不可用,必須保持targetSdk 23或更高,那麼你必須有運行權限的支持,但(也有一些外部庫與此幫助)。

0

的棒棒糖提供短信許可清單中和其他較低版本,並添加棉花糖權限檢查比棒棒糖更高,因爲在Android的

相關問題