2017-09-24 12 views
0

設定ページに移動せずにデバイス上のポップアップを使用してデバイスの場所をアクティブ化しようとしています。私はスタックのオーバーフローで複数のソリューションを試してみましたが、私のエミュレータやデバイスの位置を変えることはできません。
マイロケーションコードは以下の通りである:エミュレータの場所

OnRequest:

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull 
String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ 

     if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ 

      permission. its an array becayse it can be multiple permissions 


      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0 , 0, locationListener); 
     } 


    } 


} 

メイン:

locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 


    locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 

      Log.i("location",""+location.toString()); 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 

     } 

     @Override 
     public void onProviderEnabled(String provider) { 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 

     } 
    }; 
if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ 

    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION} ,1); 


}else{ 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0 , 0, locationListener); 

} 

マニフェスト:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

のGradleを構築あなたのメインクラスで

compile 'com.android.support:support-v4:25.0.0' 
compile 'com.google.android.gms:play-services-maps:10.2.4' 
compile 'com.google.android.gms:play-services-location:10.2.4' 

答えて

0

はこれを変更します。

if(ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ 

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION} ,1); 
return; 
}else{ 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0 , 0, locationListener); 
} 
+0

私はこのコードを置き換えようとしましたが、コードがまだオンになっていません。あなたのスタジオとエミュレータを使用する場合、これはあなたの側で有効になりますか? –

+0

エミュレータでGPS経由で現在地を取得することはできません。デバイスでアプリケーションを実行して、動作することを確認します。 –

+0

ああ、私は両方とも同じ結果を試してみましたが、プログラム的にオンにすることができませんでした。 –

0

1)時間のアクセス許可を実行し、マシュマロの前にリリースされ任意のアンドロイドのバージョンを持つデバイス上でアプリケーションを実行しようとする関連のコードを削除してください。この方法で、問題が実行時のアクセス許可に関連しているかどうかを知ることができます。

2)このライブラリを使用して実行時アクセス許可を実装できます。それは非常に簡単で使いやすいです。 https://github.com/Karumi/Dexter

関連する問題