我正在閱讀Android API 15閱讀收件箱,我被困在以下問題上:爲什麼Android會忽略READ_SMS權限?
我的應用程序只有一個活動,默認情況下啓動了主活動。它有這個onCreate
代碼
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_unlock);
// Create Inbox box URI
Uri inboxURI = Uri.parse("content://sms/inbox");
// List required columns
String[] reqCols = new String[] { "_id", "address", "body" };
// Get Content Resolver object, which will deal with Content Provider
ContentResolver cr = getContentResolver();
// Fetch Inbox SMS Message from Built-in Content Provider
Cursor c = cr.query(inboxURI, reqCols, null, null, null);
}
趁現在這段代碼沒有任何用處,只是獲取數據,並準備光標,這樣我可以遍歷它們,它會導致以下錯誤:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cryptail.stealthsms/com.cryptail.stealthsms.UnlockActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.telephony.SmsProvider uri content://sms/inbox from pid=4362, uid=10059 requires android.permission.READ_SMS, or grantUriPermission()
錯誤與Cursor c = cr.query
代碼發生衝突,並促請我使用READ_SMS權限。
這是我的清單XML
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cryptail.stealthsms" >
<uses-permission android:name="android.permission.READ_SMS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".UnlockActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:naame="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
你可以看到權限包括在內。什麼可能造成這種情況?
編輯28.9.2015 - 我沒有指定我在Android Studio中使用Android模擬器,具體是Android 6.0(API 23)。在另一個具有不同Android版本(4.4.2)的仿真設備下,此代碼可用。所以也許在Android 6.0或模擬器本身的錯誤? A6.0中是否有關於SMS權限的更改?
這真的看起來不錯。嘗試清理並重建您的項目。 – TDG
我剛剛發現這可能是模擬器問題。我下載了API 19並設置了新的AVD,並猜測它的工作原理......有人可以在Android Studio的Android 6.0(API 23)模擬器上確認此代碼的問題嗎? –
TDG:這並沒有幫助,清理,重建,從零開始重新創建代碼。 –