我的目标是 在Android Studio中打开一个摄像头. 此外,我想做的是将摄像头的视图画面进行剪切和合并。但是上面的代码只是用于打开摄像机。
我正在尝试的方法是 制作一个HTML文件并将其嵌入到Android Studio的 "webview "元素中。. 由于我对Java不熟悉,我决定在应用中使用webview,并在html文件中写下摄像头的javascript代码。
下面是activity_main.java中的代码。
<?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_assetwwwindex.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中运行时,相机的显示屏幕无法加载(而不是播放默认图片的视频填充画布),因此我无法看到相机的录制内容。但是当我试图在Android Studio中运行它时,相机的显示屏幕无法加载(相反,一个播放默认图片的视频填充了画布),所以我无法看到相机的记录。
我有什么地方做错了吗?谢谢你。
[编辑]如果我没记错的话,我没有改变android studio项目文件夹中的任何其他文件,上面没有提到。
来自 https:/developer.android.comguidetopicsmediacamera。
在使用相机API开始开发您的应用程序之前,您应该确保您的清单具有适当的声明,以允许使用相机硬件和其他相关功能。
Camera Permission - Your application must request permission to use a device camera.
<uses-permission android:name="android.permission.CAMERA" />
正如他们所说,你需要编辑你的manifest文件来使用相机。