2016-09-16 570 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的说明是这样的:

找不到方法android.app.Activity.checkSelfPermission,从方法myPackageName.Lib.hasPermission 11月9日至16日引用:46:54.969 3763-3763/myPackageName W/dalvikvm :VFY:无法解析虚方法170:Landroid /应用/活动; .checkSelfPermission(Ljava /朗/字符串;)我

的东西在这里,这段代码应该不能运行(检查许可)在Android Kitkat。但我仍然得到这个日志。当我将代码移出sdk版本的if块时,请检查它是否正常运行。

+0

我也得到相同的警告......你有没有找到任何解决方案? –

+0

使用ContextCompat代替ActivityCompat解决了我的问题 –

回答

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