2016-09-03 9 views
-2

私は、LocationManagerで遊ぶことができるようにテストアプリケーションを作ろうとしていましたが、実行時に新しい愚かなアクセス許可リクエストを渡すことさえできません。私は間違って何をしていますか、なぜ彼らはこれをとても混乱させ/複雑にしましたか?Marshmallowの実行時に許可グループの場所を要求する適切な方法は何ですか?

public class MainActivity extends AppCompatActivity { 

    private static final int LOCATION_GROUP_PERMISSION_REQUEST = 1; 
    private boolean locationPermissionGranted = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     getLocationPermission(); 

     if(locationPermissionGranted) { 
      LocationManager locationManager = 
        (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
      String provider = LocationManager.GPS_PROVIDER; 
      try { 
       Location location = locationManager.getLastKnownLocation(provider); 
       updateTextView(location); 
      } catch(SecurityException e) { 
       Log.e("PERMISSION_DENIED", e.getMessage()); 
      } 
     } 

     //registerReceiver(gpsReciever, new IntentFilter("android.location.PROVIDERS_CHANGED")); 
    } 

    private void updateTextView(Location location) { 
     Double latitude = location.getLatitude(); 
     Double longitude = location.getLongitude(); 
     TextView view = (TextView) findViewById(R.id.textView); 
     view.setText(getString(R.string.lat_long_string, latitude, longitude)); 
    } 

    private void getLocationPermission() { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (ContextCompat.checkSelfPermission(this, Manifest.permission_group.LOCATION) 
        != PackageManager.PERMISSION_GRANTED) { 
       ActivityCompat.requestPermissions(this, new String[]{Manifest.permission_group.LOCATION}, 
         LOCATION_GROUP_PERMISSION_REQUEST); 
      } 
     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, 
              @NonNull String permissions[], 
              @NonNull int[] grantResults) { 
     // Make sure it's our original READ_CONTACTS request 
     if (requestCode == LOCATION_GROUP_PERMISSION_REQUEST) { 
      if (grantResults.length == 1 && 
        grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       locationPermissionGranted = true; 
      } 
     } 
    } 
} 
+0

ブール変数のチェックをやめるとうまくいくと思います – 7geeky

+0

ブールチェックを削除すると、自分の場所のvarが実行時にnullになることがあります。私がこれをテストしているデバイスは、私のロケーションが有効になっていることを示しています。 –

答えて

5

マシュマロで、実行時に許可グループの場所を要求する適切な方法は何ですか?

あなたはありません。権限グループではなく、実行時に権限を要求します。許可グループを参照するコードからすべてを削除します(例:Manifest.permission_group.LOCATION)。権限を参照するコード(たとえば、Manifest.permission.ACCESS_FINE_LOCATION)で置き換えます。

+0

権限グループを使用して権限セットを要求することができない場合、その権限グループの目的は何か。 SMSのアクセス許可? – Antonio

+1

@Antonio:許可グループは、表示目的のみです。AFAIK。 – CommonsWare

+0

ありがとう、@ CommonSWare。どのような表示目的ですか?これらのアクセス許可グループはどこに表示されますか? – Antonio

関連する問題