2016-09-02 34 views
2

私はMarshmallowの権限サポートを実装しようとしていますが、 "onRequestPermissionsResult"内のコードは呼び出されません。コードの "onCreate"と "onMapReady"部分はうまく動作します。デバイスにパーミッションがあるかどうかを確認し、パーミッションを要求しても問題ありません。Android "onRequestPermissionsResult"が呼び出されていない

私はそれがここで述べています何をしようとしているAPI 23

、Androidのマシュマロ6.0を搭載するNexus 5Xエミュレータを使用してい

からAndroid M Permissions: onRequestPermissionsResult() not being called

>しかし、私はそれが仕事を得ることができない、それはdoesnの「ActivityCompat.requestPermissions」を使用するか直接「requestPermissions」を使用すると、それは呼び出されません。

私もv24.2.0

の任意のアイデア私のAPPCOMPATとサポートライブラリを更新しましたか?

これが私の活動です:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

private GoogleMap mMap; 
UiSettings mapSettings; 
int MY_LOCATION_REQUEST_CODE; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 

} 


@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    //Check location permission for sdk >= 23 
    if (Build.VERSION.SDK_INT >= 23) { 

     if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) 
       == PackageManager.PERMISSION_GRANTED) { 
      mMap.setMyLocationEnabled(true); 
     } else { 
      // Request permission. 
      ActivityCompat.requestPermissions(MapsActivity.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 
        MY_LOCATION_REQUEST_CODE); 
     } 
    } 

} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == MY_LOCATION_REQUEST_CODE) { 
     if (permissions.length == 1 && 
       permissions[0] == android.Manifest.permission.ACCESS_FINE_LOCATION && 
       grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      mMap.setMyLocationEnabled(true); 
     } else { 
      // Permission was denied. Display an error message. 
     } 
    } 
} 

}

+0

を使用する必要がありますか? –

+0

これは愚かな質問ですが、実際にAPI> 23でデバイス/エミュレータでアプリを実行していますか?要求の許可ダイアログが表示されますか? –

+0

Android Marshmallow 6.0、api 23を実行しているNexus 5Xエミュレータを使用しています – Systemallica

答えて

1

MY_LOCATION_REQUEST_CODEは非egative一定でなければなりません。

あなたは

private static final int MY_LOCATION_REQUEST_CODE = 1; 
+0

良いキャッチ、私はこれがstartActivityForResultのためだけに働くと思ったが、要求のパーミッションは明らかに同じように機能する。 Docsにはこれが言及されていません。 –

+0

許可要求では、フードの下で 'startActivityForResult'が使用されるため、[docs say](https://developer.android.com/reference/android/app/Activity.html#requestPermissions(java.lang) .String []、%20int)) - 両方に同じ言語が使用されます。 – ianhanniballake

+1

ActivityCompatドキュメントには、「必要」> 0というメモはありません。https://developer.android.com/reference/android/support/v4/app/ActivityCompat.html –

0

としてそれを宣言する必要があり、このラインは、trueと評価することはありません:

permissions[0] == android.Manifest.permission.ACCESS_FINE_LOCATION 

あなたは、参照することにより、これらの2つの文字列を比較しているので。

あなたは、あなたのデバイス/エミュレータが実行されているものをAPI TextUtils.equals()

TextUtils.equals(permissions[0], android.Manifest.permission.ACCESS_FINE_LOCATION) 
関連する問題