2016-06-13 12 views
0

私は最後にユーザーの所在地を知りたいと思っています。これを行うために、私はすでにマニフェストXMLファイルで以下のパーミッションを宣言しています。マニフェストで許可宣言が認識されない

Code should explicitly check to see if permission is available.

私はこの点を見ませんでしたが、私はとにかく次のチェックを追加しました:

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

しかし、以上のコードで

は、それが次のエラーを示し続けています。

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     return; 
    } 

これにより、エラーは表示されなくなりますが、アプリケーションを実行すると終了します。どのような許可がありますか?私がAndroidで作業して以来、しばらくしていましたが、この追加の小切手を処理する必要はありません。マニフェストのパーミッション宣言で十分でした。私が逃していることをアドバイスしてください。

コード:

LocationManager locationManager; 
String provider; 

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

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    provider = locationManager.getBestProvider(new Criteria(), false); 
    Location location = null; 

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
      && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     Log.i("location", "returned"); // This log will occur 
     return; //return will occur 
    } 
    location = locationManager.getLastKnownLocation(provider); //this is the line that requires permission 

    Log.i("location", "This log will not occur"); 
} 
+0

あなたはどのAndroidバージョンを実行していますか?注意してください許可許可は、アンドロイド6で変更され、ドキュメントを読んでください。 – Olayinka

+0

@Olayinka私は現在、API 23を使用しています。 – JasSy

答えて

3

は、Android 6.0では、権限付与およびアクセスが変更されました。マニフェストに権限を追加することで、アクセスが保証されなくなりました。ユーザーは、選択したときにユーザーに権限を取り消し、許可する権限を持つようになりました。

一部の権限については、ユーザーから明示的に要求する必要があります。ユーザーはあなたに許可を与えることを選択することができますし、作業を続行します。ユーザーはリクエストを拒否することも選択できます。次に、状況の処理方法を把握する必要があります。

許可は最終的なものではありません。ユーザーは後でそのアクセス許可を取り消すことができますので、アクセス許可を追跡する必要があります。アプリケーションのパフォーマンスにパーミッションが重要な場合は、パーミッションを要求するときに、ダイアログ/ポップアップを使用してアプリケーションが正しく機能するためにパーミッションが不可欠であることを理解するのに役立ちます。あなたが必要な権限を持っている場合は、チェックしている何をやったかよりよく理解read this

については

。 このメソッドから抜け出す代わりに、request for the permission

+0

でも、私は許可チェックを追加しました。私のエミュレータでは、明示的な許可を求めるシステムからの応答はありません。実際のデバイスと同じ問題で試しました。あなたのリンクを見てみましょう。 – JasSy

+0

@JasSy答えのリンクをたどり、ドキュメントを読んでください。 – Olayinka

関連する問題