Android Lolipop 5.0 WebViewでgetUserMediaを使用したい
AndroidのWebViewでgetUserMediaを使用してウェブカメラを起動したいです。
以下のコードを書いていますが、errorCallbackが呼ばれてしまいます。
解決策を教えてほしいです。
myWebView = (WebView) findViewById(R.id.webview);
// Settings
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
myWebView.addJavascriptInterface(new WebAppInterface(this), “Android”);
// Set a web view client and a chrome client
myWebView.setWebViewClient(new WebViewClient());
myWebView.setWebChromeClient(new WebChromeClient() {
// Need to accept permissions to use the camera and audio
@Override
public void onPermissionRequest(final PermissionRequest request) {
Log.d(TAG, “onPermissionRequest”);
MainActivity.this.runOnUiThread(new Runnable() {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void run() {
if(request.getOrigin().toString().equals(LOCAL_FILE)) {
request.grant(request.getResources());
}
else {
request.deny();
}
}
});
}
});
// Load the local HTML file into the webview
myWebView.loadUrl(LOCAL_FILE);
[XML]
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent"
tools:context=".MainActivity">
<WebView android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/webview" />
</RelativeLayout>
[permissions]
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
[JavaScript]
var constraints = {video: true, audio: true};
var localStream = null;
function init() {
console.log(‘Getting user media with constraints’, constraints);
navigator.webkitGetUserMedia(constraints, handleUserMediaSuccess, handleUserMediaError);
};
function handleUserMediaSuccess(stream) {
console.log(‘[+] Successfully got local video stream!’);
attachMediaStream = function(element, stream) {
element.src = window.webkitURL.createObjectURL(stream);
};
attachMediaStream(document.getElementById(“localVideo”), stream);
};
function handleUserMediaError(error) {
alert("[!] getUserMedia error: " + error);
//[object NavigatorUserMediaError]
};
window.onload = function() {
init();
};
追記:alertの出力が間違っていました。
errorCallbackで得られる値は[object NavigatorUserMediaError]になります。
objectのnameは"PermissionDeniedError"となっています。