如何将android.permission.RECORD_AUDIO权限授予android shell用户?

4

我是一名有用的助手,可以为您翻译以下内容。涉及IT技术方面的问题,您需要将命令行工具构建到Android NDK中,并在/data/local/tmp中执行。现在它提示我“需要android.permission.RECORD_AUDIO权限”。这通常在Java应用程序的AndroidManifest.xml文件中设置,但如何授予给Android shell用户呢?

源代码如下:

sp<AudioRecord> rec = new AudioRecord(AUDIO_SOURCE_MIC, 44100, AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_IN_MONO);

日志记录:

I/AudioFlinger( 3772): AudioFlinger's thread 0xf0e838c0 ready to run
W/ServiceManager( 3772): Permission failure:android.permission.RECORD_AUDIO from uid=2000 pid=-1
E/        ( 3772): Request requires android.permission.RECORD_AUDIO
E/AudioFlinger( 3772): openRecord() permission denied: recording not allowed
E/AudioRecord(14132): AudioFlinger could not create record track, status: -1
--------- beginning of crash
...
2个回答

8
在Lollipop之后,Android平台开始使用实时权限。如果你的应用运行在Marshmallow及其以上版本,你需要在Activity中授予权限。
在请求权限之前:
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) ==
                PackageManager.PERMISSION_GRANTED) {
            // put your code for Version>=Marshmallow
        } else {
            if (shouldShowRequestPermissionRationale(Manifest.permission.RECORD_AUDIO)) {
                Toast.makeText(this,
                        "App required access to audio", Toast.LENGTH_SHORT).show();
            }
            requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO
            }, REQUEST_CAMERA_PERMISSION_RESULT);
        }

    } else {
        // put your code for Version < Marshmallow
    }

在此之后,覆盖这个方法并放置你的代码:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

  if (requestCode == REQUEST_AUDIO_PERMISSION_RESULT) {
        if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(getApplicationContext(),
                    "Application will not have audio on record", Toast.LENGTH_SHORT).show();
        }
    }
}

这取决于你的目标SDK是什么,如果你的目标SDK是23及以下,你就不必提供运行时权限。 - ClassA

4
  private void requestRecordAudioPermission() {

        String requiredPermission = Manifest.permission.RECORD_AUDIO;

        // If the user previously denied this permission then show a message explaining why
        // this permission is needed
        if (getActivity().checkCallingOrSelfPermission(requiredPermission) == PackageManager.PERMISSION_GRANTED) {

        } else {

            Toast.makeText(getActivity(), "This app needs to record audio through the microphone....", Toast.LENGTH_SHORT).show();
            requestPermissions(new String[]{requiredPermission}, 101);
        }


    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        if (requestCode == 101 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // This method is called when the  permissions are given
        }

    }

如果你的设备是安卓6.0或更高版本,请执行此代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接