繁体   English   中英

为什么RECORD_AUDIO每次都返回在棉花糖中授予的权限?

[英]Why RECORD_AUDIO is returning permission granted everytime in marshmallow?

我正在使用我的应用程序中的媒体记录器。当我请求对棉花糖及更高版本中的音频录制权限时,每次都会返回我的权限。 这是我的代码。

private static final int REQUEST_RECORD_AUDIO_PERMISSION = 200;
// Requesting permission to RECORD_AUDIO
private boolean permissionToRecordAccepted = false;
private String[] permissions = {Manifest.permission.RECORD_AUDIO};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Defined SoundLevelView in main.xml file
    setContentView(R.layout.activity_noice_meter);
    //check for permission
    ActivityCompat.requestPermissions(this, permissions, REQUEST_RECORD_AUDIO_PERMISSION);
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case REQUEST_RECORD_AUDIO_PERMISSION:

            permissionToRecordAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;

            break;
    }
    if (!permissionToRecordAccepted) {

        finish();
    } else {
        //Task to be done when permission is granted
        //init();
    }

}

尝试这个,

private Context mContext=YourActivity.this;

private static final int REQUEST = 112;

if (Build.VERSION.SDK_INT >= 23) {
    String[] PERMISSIONS = {android.Manifest.permission.RECORD_AUDIO};
    if (!hasPermissions(mContext, PERMISSIONS)) {
        ActivityCompat.requestPermissions((Activity) mContext, PERMISSIONS, REQUEST );
    } else {
        //do here
    }
} else {
     //do here
}

获取权限结果

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case REQUEST: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //do here
            } else {
                Toast.makeText(mContext, "The app was not allowed to record audio", Toast.LENGTH_LONG).show();
            }
        }
    }
}

检查棉花糖的权限

private static boolean hasPermissions(Context context, String... permissions) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
    }
    return true;
}

表现

<uses-permission android:name="android.permission.RECORD_AUDIO" />

在onCreate中使用以下代码。 在这里,您不检查是否授予许可。

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.RECORD_AUDIO)) {

        // Show an explanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

         ActivityCompat.requestPermissions(this, permissions, REQUEST_RECORD_AUDIO_PERMISSION);

    }
}

仅当我们将应用程序的targetSdkVersion设置为23时,新的运行时权限才能像描述的那样工作。如果应用程序的targetSdkVersion设置为小于23。则将假定该应用程序尚未使用新的权限系统进行测试,并将切换到相同的旧行为:用户必须在安装时接受每一个权限,一旦安装将被全部授予!

长话短说:请先检查yopur目标sdkversion并执行@jitesh mohite所示的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM