2015-10-09 29 views
12

Nexus 5をAndroid 6にアップデートしました。これまではアプリが正常に動作していましたが、今は放送受信機が動作しません。新しいバージョンで何か変わった? ここで私はそれが以前のバージョンに取り組んではなく、マシュマロにしてみましたコードです - Android 6.0で放送受信機が動作しません。Marshmallow

<intent-filter > 
     <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
    </intent-filter> 
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> 
<uses-permission android:name="android.permission.READ_SMS" ></uses-permission> 

ブロードキャストレシーバー

Androidのマニフェストは

public String TAG ="someClass"; 
private static String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 
    if (action.equalsIgnoreCase(ACTION_SMS_RECEIVED)) { 
     Log.d(TAG, "Received..."); 
    } 
} 

サービス

Broadcast_receiver broadcast_receiver = new Broadcast_receiver(); 
IntentFilter filter1 = new IntentFilter(); 
filter1.addAction("android.provider.Telephony.SMS_RECEIVED"); 
registerReceiver(broadcast_receiver, filter1); 

同様に、PHONE_STATEのブロードキャスト受信者も機能していません。

+0

ためrequestPermissions? –

+0

最小は18、ターゲットは23 – Imdad

答えて

16

アプリのターゲットAPIレベルは23です。これはアンドロイドM(6.0)です。アンドロイドMでは、ユーザー権限に関する大きな変更があります。 Hereは変更を説明する良い記事です。

+1

ありがとうございます。ここをクリック - http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html – Imdad

+0

@ジャックの遅延コード - あなたの問題の解決方法を説明できるかどうかをリクエストしてください。私はまったく同じ問題に直面しています...ありがとう! – Kanchu

+1

@ KanchuあなたはAndroid Mのランタイム権限が必要です。マニフェストで宣言するだけでは不十分です。アクセス権を取り戻す機能を使用する場合は、実行時アクセス権を要求してください。ランタイムアクセス許可を実装するには、アンドロイドの開発者ガイドまたは単にGoogle(リンクがたくさん)を参照してください。 – Imdad

3

マシュマロが危険なアクセス権をブロックしています。

これは、記載されているシナリオには当てはまりませんが、他の人に役立つ可能性があります。なぜ私たちの放送受信機のいくつかが動作していなかった理由のために、私はこのままだ。カスタム許可の設定があり、android:protectionLevel="dangerous"がありました。 android:protectionLevel= "signature"に変更され、すべてが機能し始めました。アプリは、彼らはアプリをインストールしていないときに...ユーザーが許可を取り消すことができ、実行されている間

+0

働いていただきありがとうございます。 – Jinu

+2

ねえ、私は同じトラブルに直面しています。私はこのステートメントをどこで使うべきか、説明してください。 –

10

Android - Requesting Permissions

は、Android 6.0(APIレベル23)で最初に述べたように、ユーザーがアプリケーションへのアクセス許可を与えます

権限は正常と危険な2つのカテゴリに分けられます:いつでも...

はまた、と述べています

  1. 通常の権限は、ユーザーのプライバシーを直接的に危険にさらすことはありません。アプリがマニフェストで通常の権限をリストしている場合、システムは自動的に権限を付与します。

  2. 危険なアクセス権により、ユーザーの 機密データにアクセスすることができます。あなたは危険な権限を リストする場合、ユーザーが明示的にアプリに に承認を与えることがある

ここ

Dangerous PermissionsNormal Permissions

の完全なリストがあるすべてのことは基本的に手動で要求する必要があることを意味実際に必要なときには、危険な許可が必要です。

コード内に複数回必要となる可能性があるため、特定のアクセス許可が既に付与されているかどうかを確認する再利用可能なメソッドを作成することができます。ここで

例:

public class PermissionManager { 
    //A method that can be called from any Activity, to check for specific permission 
    public static void check(Activity activity, String permission, int requestCode){ 
     //If requested permission isn't Granted yet 
     if (ActivityCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) { 
      //Request permission from user 
      ActivityCompat.requestPermissions(activity,new String[]{permission},requestCode); 
     } 
    } 
} 

使用例:

//Inside your activity: 
//1. Define static constant for each permission request 
public static final int REQUEST_CODE_FOR_SMS=1; 
//2. When needed (for example inside .onStart event) use method PermissionManager.check for requested permission 
@Override 
protected void onStart() { 
    super.onStart(); 
    PermissionManager.check(this, Manifest.permission.RECEIVE_SMS, REQUEST_CODE_FOR_SMS); 
} 
//3. Handle User's response for your permission request 
@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if(requestCode==REQUEST_CODE_FOR_SMS){//response for SMS permission request 
     if(grantResults[0]==PackageManager.PERMISSION_GRANTED){ 
      //What to do if User allowed SMS permission 
     }else{ 
      //What to do if user disallowed requested SMS permission 
     } 
    } 
} 

注:としてgetActivity()

  1. あなたはPermissionManager.checkFragment内部インスタンス、使用を使用する必要がある場合最初のパーameter。

  2. あなたは、いくつかの許可が既に付与されているかどうかを確認するために、Serviceインスタンス内checkSelfPermissionを使用することができますが、ないrequestPermissionsがそれを要求します。 checkSelfPermissionはどのContextのために使用することができるので、しかし、あなたのプロジェクトの最大と最小のSDKは何だけActivity

+0

これはこの問題の答えに似ていません。私は許可はドーズモードとは関係なく、放送を呼び出さないと思う。 –

関連する問題