使用 Android Studio 的网络视图时无法在 HTML 文件中使用相机
Cannot use Camera in HTML file while using Android Studio's webview
我的目标是 在 Android Studio 中打开相机。此外,我想做的是剪切和合并相机视图屏幕。但是上面的代码只是为了打开相机。
我正在尝试的方法是 制作一个 HTML 文件并将其嵌入到 Android Studio 的 "webview" 元素 中。由于不熟悉Java,我决定在app中使用webview,并在html文件中编写相机的javascript代码。
这是 activity_main 中的代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.javascript_testing.MainActivity">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.webkit.PermissionRequest" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
MainActivity.java
中的代码
package com.example.javascript_testing;
import androidx.appcompat.app.AppCompatActivity;
import android.webkit.WebView;
import android.webkit.WebSettings;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("file:///android_asset/www/index.html");
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
}
}
最后,HTML 文件(路径:android_asset/www/index.html)
<!DOCTYPE html>
<html>
<head>
<title>TEST</title>
</head>
<body>
<video id="video" width="640" height="480" autoplay></video>
<canvas id="canvas" width="640" height="480"></canvas>
<script>
var video = document.getElementById('video');
if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) {
video.srcObject = stream;
video.play();
});
}
</script>
</body>
</html>
我在google浏览器中打开HTML文件,可以运行成功。但是当我在 Android Studio 中尝试 运行 它时,相机的显示屏幕不会加载(相反,播放默认图片的视频会填充 canvas)所以我看不到什么相机的记录。
我做错了什么吗?谢谢。
[编辑] 如果我没记错的话,我没有更改 android 工作室项目文件夹中上面没有提到的任何其他文件。
来自https://developer.android.com/guide/topics/media/camera
在使用相机 API 开始开发您的应用程序之前,您应该确保您的清单具有适当的声明以允许使用相机硬件和其他相关功能。
Camera Permission - Your application must request permission to use a device camera.
<uses-permission android:name="android.permission.CAMERA" />
正如他们所说,您需要编辑清单文件才能使用相机。
我的目标是 在 Android Studio 中打开相机。此外,我想做的是剪切和合并相机视图屏幕。但是上面的代码只是为了打开相机。
我正在尝试的方法是 制作一个 HTML 文件并将其嵌入到 Android Studio 的 "webview" 元素 中。由于不熟悉Java,我决定在app中使用webview,并在html文件中编写相机的javascript代码。
这是 activity_main 中的代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.javascript_testing.MainActivity">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.webkit.PermissionRequest" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
MainActivity.java
中的代码package com.example.javascript_testing;
import androidx.appcompat.app.AppCompatActivity;
import android.webkit.WebView;
import android.webkit.WebSettings;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("file:///android_asset/www/index.html");
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
}
}
最后,HTML 文件(路径:android_asset/www/index.html)
<!DOCTYPE html>
<html>
<head>
<title>TEST</title>
</head>
<body>
<video id="video" width="640" height="480" autoplay></video>
<canvas id="canvas" width="640" height="480"></canvas>
<script>
var video = document.getElementById('video');
if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) {
video.srcObject = stream;
video.play();
});
}
</script>
</body>
</html>
我在google浏览器中打开HTML文件,可以运行成功。但是当我在 Android Studio 中尝试 运行 它时,相机的显示屏幕不会加载(相反,播放默认图片的视频会填充 canvas)所以我看不到什么相机的记录。
我做错了什么吗?谢谢。
[编辑] 如果我没记错的话,我没有更改 android 工作室项目文件夹中上面没有提到的任何其他文件。
来自https://developer.android.com/guide/topics/media/camera
在使用相机 API 开始开发您的应用程序之前,您应该确保您的清单具有适当的声明以允许使用相机硬件和其他相关功能。
Camera Permission - Your application must request permission to use a device camera.
<uses-permission android:name="android.permission.CAMERA" />
正如他们所说,您需要编辑清单文件才能使用相机。