例:

主要活动

public class MainActivity extends AppCompatActivity {

private static final int MY_PERMISSIONS_REQUEST_RECORD_AUDIO = 101;

private ActivityMainBinding mBinding;

private PermissionRequest myRequest;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);

setWebView();

}

private void setWebView() {

mBinding.webView.getSettings().setJavaScriptEnabled(true);

mBinding.webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

mBinding.webView.setWebViewClient(new WebViewClient());

mBinding.webView.getSettings().setSaveFormData(true);

mBinding.webView.getSettings().setSupportZoom(false);

mBinding.webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

mBinding.webViemBinding.webView.getSettings().setPluginState(WebSettings.PluginState.ON);

mBinding.webView.setWebChromeClient(new WebChromeClient() {

@Override

public void onPermissionRequest(final PermissionRequest request) {

myRequest = request;

for (String permission : request.getResources()) {

switch (permission) {

case "android.webkit.resource.AUDIO_CAPTURE": {

askForPermission(request.getOrigin().toString(), Manifest.permission.RECORD_AUDIO, MY_PERMISSIONS_REQUEST_RECORD_AUDIO);

break;

}

}

}

}

});

mBinding.webView.loadUrl("

}

@Override

public void onBackPressed() {

if (mBinding.webView.canGoBack()) {

mBinding.webView.goBack();

} else {

super.onBackPressed();

}

}

@Override

public void onRequestPermissionsResult(int requestCode,

String permissions[], int[] grantResults) {

switch (requestCode) {

case MY_PERMISSIONS_REQUEST_RECORD_AUDIO: {

Log.d("WebView", "PERMISSION FOR AUDIO");

if (grantResults.length > 0

&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {

// permission was granted, yay! Do the

// contacts-related task you need to do.

myRequest.grant(myRequest.getResources());

mBinding.webView.loadUrl("");

} else {

// permission denied, boo! Disable the

// functionality that depends on this permission.

}

}

// other 'case' lines to check for other

// permissions this app might request

}

}

public void askForPermission(String origin, String permission, int requestCode) {

Log.d("WebView", "inside askForPermission for" + origin + "with" + permission);

if (ContextCompat.checkSelfPermission(getApplicationContext(),

permission)

!= PackageManager.PERMISSION_GRANTED) {

// Should we show an explanation?

if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,

permission)) {

// Show an expanation 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(MainActivity.this,

new String[]{permission},

requestCode);

}

} else {

myRequest.grant(myRequest.getResources());

}

}

}

Mainfest.xml:

的build.gradle:

android {

compileSdkVersion 26

defaultConfig {

applicationId "myapp.example.com.myapplication"

minSdkVersion 21

targetSdkVersion 21

versionCode 1

versionName "1.0"

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

更多推荐