2017-12-09 8 views
0

this documentationからコードを書きました。 askForPermission()メソッドは、ボタンをクリックすると呼び出されます。しかし、ボタンをクリックするたびにelse部分が表示されます。つまり、Permission deniedです。私はここで間違っています。権限を要求するためにポップアップを開く方法。そして、許可を与えた後、どのようにTOASTメッセージにlatitudelongitudeを表示できますか? ??私はアンドロイドで新しく、誰でもそれを解決できればとても感謝しています。要求時に実行時のアクセス許可が有効でない

私のアプリケーションではmobile's settingページのLOCATIONページの許可を有効にしようとしました。私はそれがPERMISSION DENIED

events.java

package com.example.borntoflirt.design1; 

import android.Manifest; 
import android.content.DialogInterface; 
import android.content.Context; 
import android.content.pm.PackageManager; 
import android.os.Build; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

import com.google.android.gms.location.FusedLocationProviderClient; 
import com.google.android.gms.location.LocationServices; 

import java.util.Calendar; 
import java.text.SimpleDateFormat; 

public class events extends AppCompatActivity { 

    private Button getLocationBtn; 
    public static final int MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1; 

    private FusedLocationProviderClient mFusedLocationClient; 

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

     getLocationBtn = (Button) findViewById(R.id.getLocation); 

     getLocationBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //First of All check for permission . 
       askForPermission(); 
      } 
     }); 

     mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); 
    } 

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

      // Should we show an explanation? 
      if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) { 
       // Show an explanation to the user *asynchronously* -- don't block 
       // this thread waiting for the user's response! After the user 
       // sees the explanation, try again to request the permission. 
      } else { 
       // No explanation needed, we can request the permission. 
       ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION); 
      } 
     } 
    } 

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

       // permission was granted, yay! Do the 
       // contacts-related task you need to do. 
       Toast.makeText(getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show(); 

      } else { 

       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
       Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show(); 
      } 
      return; 

      // other 'case' lines to check for other 
      // permissions this app might request 
     } 
    } 

} 
+1

マニフェストに許可がありますか? – Yupi

+0

Ohh shit。私は 'ACCESS_COARSE_LOCATION'を設定しましたが、' ACCESS_FINE_LOCATION'は設定していません。あなたのスマートさのために、私は少なくとも、許可を求めるポップアップを見ることができます。私は3日間苦労しています。今度は 'latitue'と' longitude'にどうやってアクセスするのかを試してみましょう。 –

答えて

0

を表示するボタンをクリックすると、しかし、まだこれはコメントで、あなたの質問に対する答えです。したがって、場所と緯度と経度にアクセスするには、アクティビティクラスにカップルインターフェイスを実装する必要があります。 implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener

次に、必要なメソッドをオーバーライドします。 onConnectedメソッドでは、依然として動作する廃止予定FusedLocationApiまたは新しいFusedLocationProviderClientを使用して場所へのリクエストを行います。

protected synchronized void buildGoogleApiClient() { googleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); googleApiClient.connect(); }

ハンドル取り外し位置更新:また、あなたはlocation.getLatitude();location.getLongitude();を使用して、緯度と経度にアクセスすることができ、パラメータがLocationonLocationChanged方法を取得します

また、例えばGoogleApiClientへの接続を行う必要がありますで再度ご依頼くださいonResume

関連する問題