実行時にACCESS_FINE_LOCATIONの権限(6.0より高いバージョンのAndroidを実行しているユーザーから)を取得しようとしています。これは私の主なアプリではうまくいかなかったので、私は、ユーザーから位置のアクセス許可を要求する唯一の目的でテストアプリを作ろうとしました。Androidランタイム権限ダイアログが表示されない
私が抱えている問題は、アクセス許可のダイアログボックスがユーザーに表示されていないということです.logcatから、 'onRequestPermissionsResult'メソッドがすぐに実行されていることがわかります。許可が与えられていないことを示しています。
このトピックの周りに他の質問を見た後、私は「uses-permission」行がAndroid Manifest XMLファイルにありますが、他の解決策を見つけることができなかったことを再度確認しました。ここで
は私のコードです:
package com.user.testapplication;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_LOCATION_ID = 1;
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkLocationPermissions();
}
private void checkLocationPermissions(){
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Log.i(TAG, "Device version above 6.0 - Requesting location permissions.");
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_LOCATION_ID);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_LOCATION_ID: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.i(TAG, "Permissions granted successfully!");
} else {
Log.i(TAG, "Permissions were not granted.");
}
return;
}
}//end switch
}
}//end class
私のマニフェスト:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.user.testapplication">
<uses-permission android:name="android.permisssion.ACCESS_FINE_LOCATION"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
そしてlogcatから関連する行:
11-27 13:27:47.752 31839-31839/com.user.testapplication I/MainActivity: Device version above 6.0 - Requesting location permissions.
11-27 13:27:47.881 31839-31839/com.user.testapplication I/MainActivity: Permissions were not granted.
すべてのヘルプははるかに高く評価されます - 私はちょうどそうかもしれないと思う何かが欠けている。
残念ながら私は同じ問題を抱えています。アクティビティは画面に表示されますが、アクセス許可のプロンプトは表示されません。ログを使用してチェックすると、onStartメソッドが実行され、ifステートメントの2番目のブランチが実行されます。画面には何も表示されず、requestPermissionsResultメソッドが呼び出され、「権限が付与されていません」という結果がログに出力されます。 – user3379139
考えられる理由は、最初にその許可ボックスが表示されたら、「これをもう一度表示しない」というチェックボックスを選択し、この許可を拒否したということです。あなたができることは、アプリのデータをクリアしてから再度実行するか、アプリをアンインストールしてもう一度インストールすることです。それが動作することを願っています。 – CopsOnRoad
私はこのアプリケーションをアンインストールしてからプログラムを再実行して同じ結果を得ました。私は明示的な一時停止が必要か、またはAndroidで '入力待ち'が必要/不可能かどうか疑問に思っていましたか? – user3379139