我正在尝试制作一个“相机”应用程序,它只不过是一个全屏取景器,当用户单击屏幕上的任何位置时,它将通过屏幕截图捕获图像。我知道这会拍出糟糕的照片,但我有一个非常具体的用例,需要将其作为屏幕截图。
我的问题是该应用程序正在保存一个完全空白的图像。我已经请求并授予了 WRITE_EXTERNAL_STORAGE 和 CAMERA 运行时权限,所以我认为我的问题可能与获取错误的视图有关。
这是我的 activity_fullscreen.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/container"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.cameraview.CameraView
android:id="@+id/camera"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true"
app:autoFocus="true"
app:aspectRatio="4:3"
app:facing="back"
app:flash="auto"/>
</FrameLayout>
以下是截屏时使用的一些方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fullscreen);
mCameraView = findViewById(R.id.camera);
if (mCameraView != null) {
mCameraView.addCallback(mCallback);
}
mContentView = findViewById(R.id.camera);
mContentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bitmap bitmap = takeScreenshot();
saveBitmap(bitmap);
}
public Bitmap takeScreenshot() {
View rootView = findViewById(android.R.id.content).getRootView();
rootView.setDrawingCacheEnabled(true);
return rootView.getDrawingCache();
}
public void saveBitmap(Bitmap bitmap) {
File imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png");
FileOutputStream fos;
try {
fos = new FileOutputStream(imagePath);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
Log.e("GREC", e.getMessage(), e);
} catch (IOException e) {
Log.e("GREC", e.getMessage(), e);
}
}