通道号根据设备通道来自动生成调整

master
liuguijing 4 months ago
parent 567c5d7d2e
commit 2c6ff1a17b

@ -22,10 +22,10 @@
android:requestLegacyExternalStorage="true" android:requestLegacyExternalStorage="true"
tools:targetApi="30"> tools:targetApi="30">
<activity <activity
android:name=".CameraChannelActivity" android:name=".ui.CameraChannelActivity"
android:exported="false" /> android:exported="false" />
<activity <activity
android:name=".CameraActivity" android:name=".ui.CameraActivity"
android:exported="false" /> android:exported="false" />
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"

@ -1,11 +1,9 @@
package com.xypower.mppreview; package com.xypower.mppreview;
import static com.xypower.mppreview.HdrUtil.generateTimestamp; import static com.xypower.mppreview.utils.HdrUtil.generateTimestamp;
import static java.lang.System.loadLibrary; import static java.lang.System.loadLibrary;
import android.Manifest; import android.Manifest;
import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;

@ -8,21 +8,33 @@ import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts; import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import android.Manifest; import android.Manifest;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.Button; 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.bean.Contants;
import com.xypower.mppreview.databinding.ActivityMainBinding; import com.xypower.mppreview.utils.CameraUtils;
import java.io.File; import java.io.File;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemSelectedListener { public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemSelectedListener, OnItemClickListener {
static { static {
loadLibrary("mppreview"); loadLibrary("mppreview");
@ -36,6 +48,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
private ActivityResultLauncher<Intent> photoResultLauncher; private ActivityResultLauncher<Intent> photoResultLauncher;
private int picsize = 0; private int picsize = 0;
private com.xypower.mppreview.databinding.ActivityMainBinding viewBinding; private com.xypower.mppreview.databinding.ActivityMainBinding viewBinding;
private int numberOfCameras;
protected native void test(); protected native void test();
@ -43,7 +56,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
viewBinding = ActivityMainBinding.inflate(getLayoutInflater()); viewBinding = com.xypower.mppreview.databinding.ActivityMainBinding.inflate(getLayoutInflater());
setContentView(viewBinding.getRoot()); setContentView(viewBinding.getRoot());
initView(); initView();
initActivityResult(); initActivityResult();
@ -85,12 +98,19 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
viewBinding.hdrtakepic.setOnClickListener(this); viewBinding.hdrtakepic.setOnClickListener(this);
viewBinding.systakepic.setOnClickListener(this); viewBinding.systakepic.setOnClickListener(this);
viewBinding.spinner.setOnItemSelectedListener(this); viewBinding.spinner.setOnItemSelectedListener(this);
viewBinding.channel1.setOnClickListener(this); // viewBinding.channel1.setOnClickListener(this);
viewBinding.channel2.setOnClickListener(this); // viewBinding.channel2.setOnClickListener(this);
viewBinding.channel3.setOnClickListener(this); // viewBinding.channel3.setOnClickListener(this);
viewBinding.channel4.setOnClickListener(this); // viewBinding.channel4.setOnClickListener(this);
viewBinding.channel5.setOnClickListener(this); // viewBinding.channel5.setOnClickListener(this);
viewBinding.channel6.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() { private void initActivityResult() {
@ -138,28 +158,40 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
case R.id.systakepic: case R.id.systakepic:
PhotoUtil.openCamera(this, photoResultLauncher); PhotoUtil.openCamera(this, photoResultLauncher);
break; break;
case R.id.channel1: // case R.id.channel1:
openChannelActivity(0); // openChannelActivity(0);
break; // break;
case R.id.channel2: // case R.id.channel2:
openChannelActivity(1); // openChannelActivity(1);
break; // break;
case R.id.channel3: // case R.id.channel3:
openChannelActivity(2); // openChannelActivity(2);
break; // break;
case R.id.channel4: // case R.id.channel4:
openChannelActivity(3); // openChannelActivity(3);
break; // break;
case R.id.channel5: // case R.id.channel5:
openChannelActivity(4); // openChannelActivity(4);
break; // break;
case R.id.channel6: // case R.id.channel6:
openChannelActivity(5); // openChannelActivity(5);
break; // 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) { public void openChannelActivity(int channel) {
Intent intent = new Intent(this, CameraChannelActivity.class); Intent intent = new Intent(this, CameraChannelActivity.class);
intent.putExtra(Contants.CAMERAID, channel); intent.putExtra(Contants.CAMERAID, channel);
@ -176,4 +208,9 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
public void onNothingSelected(AdapterView<?> parent) { public void onNothingSelected(AdapterView<?> parent) {
} }
@Override
public void onItemClick(View v, int position) {
openChannelActivity(position);
}
} }

@ -0,0 +1,69 @@
package com.xypower.mppreview.adapter;
import android.annotation.SuppressLint;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.xypower.mppreview.R;
import com.xypower.mppreview.interfaces.OnItemClickListener;
import java.util.List;
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.MyViewHolder> {
private Integer count;
public OnItemClickListener listener;
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private final TextView title;
private OnItemClickListener listeners;
public MyViewHolder(View view, OnItemClickListener listener) {
super(view);
this.listeners = listener;
title = view.findViewById(R.id.channel);
title.setOnClickListener(this);
}
public TextView getTitle() {
return title;
}
@Override
public void onClick(View v) {
if (listeners != null) {
listeners.onItemClick(v, getAdapterPosition());
}
}
}
public ItemAdapter(Integer itemcount) {
this.count = itemcount;
}
public void setOnClickListener(OnItemClickListener listener) {
this.listener = listener;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false);
return new MyViewHolder(view,listener);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, @SuppressLint("RecyclerView") int position) {
// Integer item = itemList.get(position);
holder.getTitle().setText("通道"+(position+1));
}
@Override
public int getItemCount() {
return count;
}
}

@ -0,0 +1,8 @@
package com.xypower.mppreview.interfaces;
import android.view.View;
public interface OnItemClickListener {
void onItemClick(View v, int position);
}

@ -1,19 +1,15 @@
package com.xypower.mppreview; package com.xypower.mppreview.ui;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import android.content.ComponentCallbacks2;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View;
import android.view.Window; import android.view.Window;
import android.view.WindowInsets;
import android.view.WindowInsetsController;
import android.view.WindowManager; import android.view.WindowManager;
import com.xypower.mppreview.Camera2RawFragment;
import com.xypower.mppreview.R;
import com.xypower.mppreview.bean.Contants; import com.xypower.mppreview.bean.Contants;
public class CameraActivity extends AppCompatActivity { public class CameraActivity extends AppCompatActivity {

@ -1,6 +1,4 @@
package com.xypower.mppreview; package com.xypower.mppreview.ui;
import static android.os.Environment.getExternalStoragePublicDirectory;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
@ -16,19 +14,18 @@ import androidx.core.content.ContextCompat;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.Toast; import android.widget.Toast;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import com.xypower.mppreview.MyAnalyzer;
import com.xypower.mppreview.R;
import com.xypower.mppreview.bean.Contants; import com.xypower.mppreview.bean.Contants;
import com.xypower.mppreview.databinding.ActivityCameraChannelBinding; import com.xypower.mppreview.databinding.ActivityCameraChannelBinding;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;

@ -0,0 +1,28 @@
package com.xypower.mppreview.utils;
import android.content.Context;
import androidx.camera.core.CameraInfo;
import androidx.camera.lifecycle.ProcessCameraProvider;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.List;
import java.util.concurrent.ExecutionException;
public class CameraUtils {
public static int getNumberOfCameras(Context context) {
List<CameraInfo> availableCameraInfos;
ListenableFuture<ProcessCameraProvider> instance = ProcessCameraProvider.getInstance(context);
try {
ProcessCameraProvider processCameraProvider = instance.get();
availableCameraInfos = processCameraProvider.getAvailableCameraInfos();
} catch (ExecutionException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return availableCameraInfos.size();
}
}

@ -1,4 +1,4 @@
package com.xypower.mppreview; package com.xypower.mppreview.utils;
import static java.lang.System.loadLibrary; import static java.lang.System.loadLibrary;

@ -1,4 +1,4 @@
package com.xypower.mppreview; package com.xypower.mppreview.utils;
import android.content.Context; import android.content.Context;

@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:keepScreenOn="true" android:keepScreenOn="true"
tools:context=".CameraActivity"> tools:context=".ui.CameraActivity">
<!-- res/layout/example_activity.xml --> <!-- res/layout/example_activity.xml -->
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView

@ -5,24 +5,35 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:keepScreenOn="true" android:keepScreenOn="true"
tools:context=".CameraChannelActivity"> tools:context=".ui.CameraChannelActivity">
<androidx.camera.view.PreviewView <androidx.camera.view.PreviewView
android:id="@+id/viewFinder" android:id="@+id/viewFinder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent" />
<!-- <Button-->
<!-- android:id="@+id/image_capture_button"-->
<!-- android:layout_width="110dp"-->
<!-- android:layout_height="110dp"-->
<!-- android:layout_marginEnd="50dp"-->
<!-- android:layout_marginBottom="50dp"-->
<!-- android:elevation="2dp"-->
<!-- android:text="拍照"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintEnd_toStartOf="@id/vertical_centerline"-->
<!-- app:layout_constraintLeft_toLeftOf="parent" />-->
<Button <Button
android:id="@+id/image_capture_button" android:id="@+id/image_capture_button"
android:layout_width="110dp" android:layout_width="50dp"
android:layout_height="110dp" android:layout_height="50dp"
android:layout_marginEnd="50dp" android:layout_marginBottom="40dp"
android:layout_marginBottom="50dp" android:background="@mipmap/takepic"
android:elevation="2dp" android:shadowColor="@null"
android:text="拍照"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/vertical_centerline" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintLeft_toLeftOf="parent" /> app:layout_constraintRight_toRightOf="parent" />
<androidx.constraintlayout.widget.Guideline <androidx.constraintlayout.widget.Guideline

@ -41,62 +41,69 @@
android:id="@+id/systakepic" android:id="@+id/systakepic"
android:layout_width="100dp" android:layout_width="100dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="15dp" android:layout_marginLeft="10dp"
android:text="拍照" android:text="拍照"
app:layout_constraintLeft_toRightOf="@id/hdrtakepic" app:layout_constraintLeft_toRightOf="@id/hdrtakepic"
app:layout_constraintTop_toTopOf="@+id/hdrtakepic" /> app:layout_constraintTop_toTopOf="@+id/hdrtakepic" />
<Button <!-- <Button-->
android:id="@+id/channel1" <!-- android:id="@+id/channel1"-->
android:layout_width="100dp" <!-- android:layout_width="100dp"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="通道一" <!-- android:text="通道一"-->
app:layout_constraintLeft_toLeftOf="parent" <!-- app:layout_constraintLeft_toLeftOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/hdrtakepic" /> <!-- app:layout_constraintTop_toBottomOf="@+id/hdrtakepic" />-->
<Button <!-- <Button-->
android:id="@+id/channel2" <!-- android:id="@+id/channel2"-->
android:layout_width="100dp" <!-- android:layout_width="100dp"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:layout_marginLeft="15dp" <!-- android:layout_marginLeft="15dp"-->
android:text="通道二" <!-- android:text="通道二"-->
app:layout_constraintLeft_toRightOf="@+id/channel1" <!-- app:layout_constraintLeft_toRightOf="@+id/channel1"-->
app:layout_constraintTop_toTopOf="@+id/channel1" /> <!-- app:layout_constraintTop_toTopOf="@+id/channel1" />-->
<Button <!-- <Button-->
android:id="@+id/channel3" <!-- android:id="@+id/channel3"-->
android:layout_width="100dp" <!-- android:layout_width="100dp"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:layout_marginLeft="15dp" <!-- android:layout_marginLeft="15dp"-->
android:text="通道三" <!-- android:text="通道三"-->
app:layout_constraintLeft_toRightOf="@+id/channel2" <!-- app:layout_constraintLeft_toRightOf="@+id/channel2"-->
app:layout_constraintTop_toTopOf="@+id/channel1" /> <!-- app:layout_constraintTop_toTopOf="@+id/channel1" />-->
<Button <!-- <Button-->
android:id="@+id/channel4" <!-- android:id="@+id/channel4"-->
android:layout_width="100dp" <!-- android:layout_width="100dp"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="通道四" <!-- android:text="通道四"-->
app:layout_constraintLeft_toLeftOf="parent" <!-- app:layout_constraintLeft_toLeftOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/channel1" /> <!-- app:layout_constraintTop_toBottomOf="@+id/channel1" />-->
<Button <!-- <Button-->
android:id="@+id/channel5" <!-- android:id="@+id/channel5"-->
android:layout_width="100dp" <!-- android:layout_width="100dp"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:layout_marginLeft="15dp" <!-- android:layout_marginLeft="15dp"-->
android:text="通道五" <!-- android:text="通道五"-->
app:layout_constraintLeft_toRightOf="@+id/channel4" <!-- app:layout_constraintLeft_toRightOf="@+id/channel4"-->
app:layout_constraintTop_toTopOf="@+id/channel4" /> <!-- app:layout_constraintTop_toTopOf="@+id/channel4" />-->
<Button <!-- <Button-->
android:id="@+id/channel6" <!-- android:id="@+id/channel6"-->
android:layout_width="100dp" <!-- android:layout_width="100dp"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:layout_marginLeft="15dp" <!-- android:layout_marginLeft="15dp"-->
android:text="通道六" <!-- android:text="通道六"-->
app:layout_constraintLeft_toRightOf="@+id/channel5" <!-- app:layout_constraintLeft_toRightOf="@+id/channel5"-->
app:layout_constraintTop_toTopOf="@+id/channel4" /> <!-- app:layout_constraintTop_toTopOf="@+id/channel4" />-->
<androidx.recyclerview.widget.RecyclerView
app:layout_constraintTop_toBottomOf="@id/systakepic"
app:layout_constraintBottom_toBottomOf="parent"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/channel"
android:layout_width="100dp"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save