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