|
|
|
|
package com.xypower.mppreview;
|
|
|
|
|
|
|
|
|
|
import static java.lang.System.loadLibrary;
|
|
|
|
|
|
|
|
|
|
import androidx.activity.result.ActivityResult;
|
|
|
|
|
import androidx.activity.result.ActivityResultCallback;
|
|
|
|
|
import androidx.activity.result.ActivityResultLauncher;
|
|
|
|
|
import androidx.activity.result.contract.ActivityResultContracts;
|
|
|
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
|
|
|
import androidx.core.app.ActivityCompat;
|
|
|
|
|
import androidx.recyclerview.widget.GridLayoutManager;
|
|
|
|
|
|
|
|
|
|
import android.Manifest;
|
|
|
|
|
import android.content.Context;
|
|
|
|
|
import android.content.Intent;
|
|
|
|
|
import android.content.pm.PackageManager;
|
|
|
|
|
import android.hardware.camera2.CameraAccessException;
|
|
|
|
|
import android.hardware.camera2.CameraManager;
|
|
|
|
|
import android.os.Bundle;
|
|
|
|
|
import android.util.Log;
|
|
|
|
|
import android.view.View;
|
|
|
|
|
import android.widget.AdapterView;
|
|
|
|
|
import android.widget.Button;
|
|
|
|
|
import android.widget.Toast;
|
|
|
|
|
|
|
|
|
|
import com.xypower.mppreview.adapter.ItemAdapter;
|
|
|
|
|
import com.xypower.mppreview.interfaces.OnItemClickListener;
|
|
|
|
|
import com.xypower.mppreview.ui.CameraActivity;
|
|
|
|
|
import com.xypower.mppreview.ui.CameraChannelActivity;
|
|
|
|
|
import com.xypower.mppreview.utils.PhotoUtil;
|
|
|
|
|
import com.xypower.mppreview.bean.Contants;
|
|
|
|
|
import com.xypower.mppreview.utils.CameraUtils;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
|
|
public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemSelectedListener, OnItemClickListener {
|
|
|
|
|
|
|
|
|
|
static {
|
|
|
|
|
loadLibrary("mppreview");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static int MY_PERMISSIONS_REQUEST_FOREGROUND_SERVICE = 100;
|
|
|
|
|
|
|
|
|
|
public static int ExposureComp = 0;
|
|
|
|
|
private Button systakepic;
|
|
|
|
|
private Button hdrtakepic;
|
|
|
|
|
private ActivityResultLauncher<Intent> photoResultLauncher;
|
|
|
|
|
private int picsize = 0;
|
|
|
|
|
private com.xypower.mppreview.databinding.ActivityMainBinding viewBinding;
|
|
|
|
|
private int numberOfCameras;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected native void test();
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
|
viewBinding = com.xypower.mppreview.databinding.ActivityMainBinding.inflate(getLayoutInflater());
|
|
|
|
|
setContentView(viewBinding.getRoot());
|
|
|
|
|
initView();
|
|
|
|
|
initActivityResult();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String[] accessPermissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.FOREGROUND_SERVICE, Manifest.permission.READ_PHONE_STATE,
|
|
|
|
|
/*Manifest.permission.PACKAGE_USAGE_STATS,*/
|
|
|
|
|
/*Manifest.permission.SET_TIME,*/};
|
|
|
|
|
boolean needRequire = false;
|
|
|
|
|
for (String access : accessPermissions) {
|
|
|
|
|
int curPermission = ActivityCompat.checkSelfPermission(MainActivity.this, access);
|
|
|
|
|
if (curPermission != PackageManager.PERMISSION_GRANTED) {
|
|
|
|
|
needRequire = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (needRequire) {
|
|
|
|
|
ActivityCompat.requestPermissions(MainActivity.this, accessPermissions, MY_PERMISSIONS_REQUEST_FOREGROUND_SERVICE);
|
|
|
|
|
// return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
File file = this.getFilesDir();
|
|
|
|
|
|
|
|
|
|
String path = "/sdcard/com.xypower.mppreview/";
|
|
|
|
|
file = new File(path);
|
|
|
|
|
if (!file.exists()) {
|
|
|
|
|
file.mkdirs();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
new Thread(new Runnable() {
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
test();
|
|
|
|
|
}
|
|
|
|
|
}).start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void initView() {
|
|
|
|
|
viewBinding.hdrtakepic.setOnClickListener(this);
|
|
|
|
|
viewBinding.systakepic.setOnClickListener(this);
|
|
|
|
|
viewBinding.spinner.setOnItemSelectedListener(this);
|
|
|
|
|
// viewBinding.channel1.setOnClickListener(this);
|
|
|
|
|
// viewBinding.channel2.setOnClickListener(this);
|
|
|
|
|
// viewBinding.channel3.setOnClickListener(this);
|
|
|
|
|
// viewBinding.channel4.setOnClickListener(this);
|
|
|
|
|
// viewBinding.channel5.setOnClickListener(this);
|
|
|
|
|
// viewBinding.channel6.setOnClickListener(this);
|
|
|
|
|
numberOfCameras = CameraUtils.getNumberOfCameras(this);
|
|
|
|
|
ItemAdapter itemAdapter = new ItemAdapter(numberOfCameras);
|
|
|
|
|
itemAdapter.setOnClickListener(this);
|
|
|
|
|
viewBinding.recyclerView.setAdapter(itemAdapter);
|
|
|
|
|
viewBinding.recyclerView.setLayoutManager(new GridLayoutManager(this,3));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void initActivityResult() {
|
|
|
|
|
photoResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onActivityResult(ActivityResult result) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected void onResume() {
|
|
|
|
|
super.onResume();
|
|
|
|
|
// if (OpenCVLoader.initDebug()) {
|
|
|
|
|
// Log.d("dfsdfd", "成功");
|
|
|
|
|
// } else {
|
|
|
|
|
// Log.d("dfsdfd", "失败");
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void restartFragment() {
|
|
|
|
|
getSupportFragmentManager().beginTransaction().replace(R.id.container, Camera2RawFragment.newInstance()).commit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void doFocus() {
|
|
|
|
|
Camera2RawFragment fragment = (Camera2RawFragment) getSupportFragmentManager().findFragmentById(R.id.container);
|
|
|
|
|
fragment.doFocus();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void takePicture() {
|
|
|
|
|
Camera2RawFragment fragment = (Camera2RawFragment) getSupportFragmentManager().findFragmentById(R.id.container);
|
|
|
|
|
fragment.takePicture();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
int id = view.getId();
|
|
|
|
|
switch (id) {
|
|
|
|
|
case R.id.hdrtakepic:
|
|
|
|
|
Intent intent = new Intent(this, CameraActivity.class);
|
|
|
|
|
intent.putExtra(Contants.HDRNUM, picsize);
|
|
|
|
|
startActivity(intent);
|
|
|
|
|
break;
|
|
|
|
|
case R.id.systakepic:
|
|
|
|
|
PhotoUtil.openCamera(this, photoResultLauncher);
|
|
|
|
|
break;
|
|
|
|
|
// case R.id.channel1:
|
|
|
|
|
// openChannelActivity(0);
|
|
|
|
|
// break;
|
|
|
|
|
// case R.id.channel2:
|
|
|
|
|
// openChannelActivity(1);
|
|
|
|
|
// break;
|
|
|
|
|
// case R.id.channel3:
|
|
|
|
|
// openChannelActivity(2);
|
|
|
|
|
// break;
|
|
|
|
|
// case R.id.channel4:
|
|
|
|
|
// openChannelActivity(3);
|
|
|
|
|
// break;
|
|
|
|
|
// case R.id.channel5:
|
|
|
|
|
// openChannelActivity(4);
|
|
|
|
|
// break;
|
|
|
|
|
// case R.id.channel6:
|
|
|
|
|
// openChannelActivity(5);
|
|
|
|
|
// break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static int getNumberOfCameras(Context context) {
|
|
|
|
|
CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
|
|
|
|
|
try {
|
|
|
|
|
String[] cameraIds = manager.getCameraIdList();
|
|
|
|
|
return cameraIds.length;
|
|
|
|
|
} catch (CameraAccessException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
return 0; // 如果发生异常,返回0个摄像头
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void openChannelActivity(int channel) {
|
|
|
|
|
Intent intent = new Intent(this, CameraChannelActivity.class);
|
|
|
|
|
intent.putExtra(Contants.CAMERAID, channel);
|
|
|
|
|
startActivity(intent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
|
|
|
|
picsize = position;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onNothingSelected(AdapterView<?> parent) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onItemClick(View v, int position) {
|
|
|
|
|
openChannelActivity(position);
|
|
|
|
|
}
|
|
|
|
|
}
|