2016-07-20 7 views
2

ユーザーがandroid.permission.RECEIVE_SMSを許可した後、私のアプリはユーザーのSMSを読み取るでしょう。
ですが、一部のユーザーがクラッシュすることがあります。

許可グループが動作しない

android.permission.RECEIVE_SMSとandroid.permission.READ_SMSの両方がAndroidManifest.xmlをで宣言されている、と彼らは同じ権限グループです(https://developer.android.com/guide/topics/security/permissions.html

詳細クラッシュレポート:

java.lang.RuntimeException: An error occurred while executing doInBackground() 
    at android.os.AsyncTask$3.done(AsyncTask.java:309) 
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 
    at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
    at java.lang.Thread.run(Thread.java:818) 
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.telephony.SmsProvider uri content://sms/ from pid=24160, uid=10244 requires android.permission.READ_SMS, or grantUriPermission() 
    at android.os.Parcel.readException(Parcel.java:1620) 
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) 
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 
    at android.content.ContentProviderProxy.query(ContentProviderNative.java:421) 
    at android.content.ContentResolver.query(ContentResolver.java:502) 
    at android.content.CursorLoader.loadInBackground(CursorLoader.java:64) 
    at android.content.CursorLoader.loadInBackground(CursorLoader.java:42) 
    at android.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:312) 
    at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:69) 
    at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:57) 
    at android.os.AsyncTask$2.call(AsyncTask.java:295) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    ... 3 more 
java.lang.SecurityException: Permission Denial: reading com.android.providers.telephony.SmsProvider uri content://sms/ from pid=24160, uid=10244 requires android.permission.READ_SMS, or grantUriPermission() 
    at android.os.Parcel.readException(Parcel.java:1620) 
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) 
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 
    at android.content.ContentProviderProxy.query(ContentProviderNative.java:421) 
    at android.content.ContentResolver.query(ContentResolver.java:502) 
    at android.content.CursorLoader.loadInBackground(CursorLoader.java:64) 
    at android.content.CursorLoader.loadInBackground(CursorLoader.java:42) 
    at android.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:312) 
    at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:69) 
    at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:57) 
    at android.os.AsyncTask$2.call(AsyncTask.java:295) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
    at java.lang.Thread.run(Thread.java:818) 

私は助けが必要です

+1

"__Note:__あなたのアプリは、ユーザーが既に同じグループ内で別のアクセス許可を与えていても、必要なすべてのアクセス権を明示的に要求する必要があります。 - [参考](https://developer.android.com/training/permissions/requesting.html#perm-request) –

+0

マイクM、私は今それを参照してください...、ありがとう、良いノート.... – HenryChuang

+0

問題ありません。私はちょっと答えて、ちょっと分かりました。私はちょっと答えました。 –

答えて

2

これは権限グループの仕組みとはよく似ていません。グループは、主にどのようにアクセス権要求がユーザに表示されるかを示します。

グループの説明は、特定のアクセス許可の説明ではなく、ユーザーに提示されるものです。さらに、ユーザーがすでにグループに特定の権限を付与している場合は、そのユーザーに再度プロンプトを出すことなく、そのグループの別の権限の後続要求が自動的に許可されます。

しかし、あなたのアプリは依然として必要な特定の権限を依頼する必要があります。あなたの場合、RECEIVE_SMS権限を持っていても、特別にリクエストするまでは、あなたのアプリケーションに自動的に許可は与えられません。READ_SMS

Requesting Permissions at Run Timeをカバーする開発者のページに記載されているよう:

注:あなたのアプリはまだユーザーが既に同じグループ内の別の権限を付与している場合でも、それが必要とするすべての権限を明示的に要求する必要があります。さらに、グループへの権限のグループ化は、将来のAndroidリリースで変更される可能性があります。あなたのコードは、特定のパーミッションが同じグループ内にあるかどうかを前提にしてはなりません。

0

許可がまだ与えられていますか? Marshmallowでは、ユーザーはいつでも許可を拒否できます。

関連する問題