2016-11-27 6 views
0

実行時に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. 

すべてのヘルプははるかに高く評価されます - 私はちょうどそうかもしれないと思う何かが欠けている。

答えて

1

これをonStart()メソッドで使用すると、問題が解決します。無Dialogボックスの理由が示されている

//This checks for the permission 
    if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
    { 

     // Should we show an explanation? 
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION)){ 


      // You can show your dialog message here but instead I am 
      // showing the grant permission dialog box 
      ActivityCompat.requestPermissions(this, new String[] { 
          Manifest.permission.ACCESS_FINE_LOCATION, 
          Manifest.permission.ACCESS_COARSE_LOCATION }, 
        10); 



     } 
     else{ 

      //Requesting permission 
      ActivityCompat.requestPermissions(this, new String[] { 
          Manifest.permission.ACCESS_FINE_LOCATION, 
          Manifest.permission.ACCESS_COARSE_LOCATION }, 
        10); 
     } 
    } 
+0

残念ながら私は同じ問題を抱えています。アクティビティは画面に表示されますが、アクセス許可のプロンプトは表示されません。ログを使用してチェックすると、onStartメソッドが実行され、ifステートメントの2番目のブランチが実行されます。画面には何も表示されず、requestPermissionsResultメソッドが呼び出され、「権限が付与されていません」という結果がログに出力されます。 – user3379139

+0

考えられる理由は、最初にその許可ボックスが表示されたら、「これをもう一度表示しない」というチェックボックスを選択し、この許可を拒否したということです。あなたができることは、アプリのデータをクリアしてから再度実行するか、アプリをアンインストールしてもう一度インストールすることです。それが動作することを願っています。 – CopsOnRoad

+0

私はこのアプリケーションをアンインストールしてからプログラムを再実行して同じ結果を得ました。私は明示的な一時停止が必要か、またはAndroidで '入力待ち'が必要/不可能かどうか疑問に思っていましたか? – user3379139

0

AndroidManifestのタイプミスでした、あなたは許可がandroid-permissionではなくandroid-permisssionを綴られたことがわかります。

関連する問題