2016-09-16 10 views
2

初めて私のアプリケーションを使用しているユーザーからの実行時アクセス許可を実装しようとしています。コードは次のとおりです。メソッドを見つけられませんでした。android.app.Activity.checkSelfPermission

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) { 
     if ((ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) && 
       (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) { 
      new masterdb(getApplicationContext()); 
      new checkRegistration().execute(); 
     } else { 

     } 
    } else { 
     //initialize database 
    } 

しかし、アプリケーションが応答しないとアプリケーションがクラッシュします。 logcatは、このようなものを示しています

9月16日11メソッドmyPackageName.Lib.hasPermissionから参照する方法android.app.Activity.checkSelfPermission、見つかりませんでした:46:54.969 3763から3763/mypackagenameのW/dalvikvmを:VFY:仮想メソッド170解決することができませんでし:Landroid /アプリ/アクティビティ; .checkSelfPermission(Ljava/LANG /文字列;)私は

ここ

ことですが、このコードでも(権限のチェック)を実行するべきではありませんがアンドロイドKitkatで。しかし、私はまだこのログを取得します。私がsdkバージョンチェックのifブロックから自分のコードを移動すると、正常に動作します。

+0

私も同じ警告を受けています...解決策は見つかりましたか? –

+0

ActivityCompatの代わりにContextCompatを使用すると、私の問題を解決しました –

答えて

0

を使用してみてください。許可の要求でない場合

private boolean checkPermission(){ 
     int result = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION); 
     if (result == PackageManager.PERMISSION_GRANTED){ 

      return true; 

     } else { 

      return false; 

     } 
    } 

    private void requestPermission(){ 

     if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.ACCESS_FINE_LOCATION)){ 

      Toast.makeText(context,"GPS permission allows us to access location data. Please allow in App Settings for additional functionality.",Toast.LENGTH_LONG).show(); 

     } else { 

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

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

        Snackbar.make(view,"Permission Granted, Now you can access location data.",Snackbar.LENGTH_LONG).show(); 

       } else { 

        Snackbar.make(view,"Permission Denied, You cannot access location data.",Snackbar.LENGTH_LONG).show(); 

       } 
       break; 
     } 
    } 
1

付与されているかどうかの権限をチェックするために、この機能を使って、このコード

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     for (String permission : permissions) { 
      int phoneStatePermission = Context.checkSelfPermission(permission); 
      if (phoneStatePermission != PackageManager.PERMISSION_GRANTED) { 

      } 
     } 
} 
+1

どのような違いがあるのか​​分かりませんが、まったく同じコードです –

+0

@AmanGroverこの記事を参照してください http://stackoverflow.com/a/32615104/4746180 – Hayk

関連する問題