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.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkRequest; 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 com.xypower.mppreview.utils.RouteManager; import java.io.File; import java.util.ArrayList; public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemSelectedListener, OnItemClickListener { static { loadLibrary("mppreview"); } // static { // if (!OpenCVLoader.initDebug()) { // Log.e("OpenCV", "Initialization failed"); // } else { // Log.d("OpenCV", "Initialization succeeded"); // } // } private static int MY_PERMISSIONS_REQUEST_FOREGROUND_SERVICE = 100; public static int ExposureComp = 0; private Button systakepic; private Button hdrtakepic; private ActivityResultLauncher 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); numberOfCameras = CameraUtils.getNumberOfCameras(this); ItemAdapter itemAdapter = new ItemAdapter(numberOfCameras); itemAdapter.setOnClickListener(this); viewBinding.recyclerView.setAdapter(itemAdapter); viewBinding.recyclerView.setLayoutManager(new GridLayoutManager(this,3)); // initNetWork(); } private void initNetWork() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { super.onAvailable(network); NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network); if (capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) { Log.d("NetworkCallback", "Ethernet connected"); // 以太网已连接 viewBinding.hdrhint.setText("已连接"); RouteManager.addRoute("192.168.68.0/24", "eth0"); } } @Override public void onLost(Network network) { super.onLost(network); Log.d("NetworkCallback", "Network lost"); // 网络断开 viewBinding.hdrhint.setText("已断开"); } }; NetworkRequest request = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .build(); connectivityManager.registerNetworkCallback(request, networkCallback); } private void initActivityResult() { photoResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { @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); } }