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

master
liuguijing 4 months ago
parent 567c5d7d2e
commit 2c6ff1a17b

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

@ -1,11 +1,9 @@
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 android.Manifest;
import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ApplicationInfo;

@ -8,21 +8,33 @@ 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.databinding.ActivityMainBinding;
import com.xypower.mppreview.utils.CameraUtils;
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 {
loadLibrary("mppreview");
@ -36,6 +48,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
private ActivityResultLauncher<Intent> photoResultLauncher;
private int picsize = 0;
private com.xypower.mppreview.databinding.ActivityMainBinding viewBinding;
private int numberOfCameras;
protected native void test();
@ -43,7 +56,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewBinding = ActivityMainBinding.inflate(getLayoutInflater());
viewBinding = com.xypower.mppreview.databinding.ActivityMainBinding.inflate(getLayoutInflater());
setContentView(viewBinding.getRoot());
initView();
initActivityResult();
@ -85,12 +98,19 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
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);
// 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() {
@ -138,28 +158,40 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
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;
// 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);
@ -176,4 +208,9 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
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 android.content.ComponentCallbacks2;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowInsets;
import android.view.WindowInsetsController;
import android.view.WindowManager;
import com.xypower.mppreview.Camera2RawFragment;
import com.xypower.mppreview.R;
import com.xypower.mppreview.bean.Contants;
public class CameraActivity extends AppCompatActivity {

@ -1,6 +1,4 @@
package com.xypower.mppreview;
import static android.os.Environment.getExternalStoragePublicDirectory;
package com.xypower.mppreview.ui;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
@ -16,19 +14,18 @@ import androidx.core.content.ContextCompat;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
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.databinding.ActivityCameraChannelBinding;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
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;

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

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

@ -5,24 +5,35 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true"
tools:context=".CameraChannelActivity">
tools:context=".ui.CameraChannelActivity">
<androidx.camera.view.PreviewView
android:id="@+id/viewFinder"
android:layout_width="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
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="拍照"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginBottom="40dp"
android:background="@mipmap/takepic"
android:shadowColor="@null"
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

@ -41,62 +41,69 @@
android:id="@+id/systakepic"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginLeft="10dp"
android:text="拍照"
app:layout_constraintLeft_toRightOf="@id/hdrtakepic"
app:layout_constraintTop_toTopOf="@+id/hdrtakepic" />
<Button
android:id="@+id/channel1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="通道一"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/hdrtakepic" />
<!-- <Button-->
<!-- android:id="@+id/channel1"-->
<!-- android:layout_width="100dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="通道一"-->
<!-- app:layout_constraintLeft_toLeftOf="parent"-->
<!-- app:layout_constraintTop_toBottomOf="@+id/hdrtakepic" />-->
<Button
android:id="@+id/channel2"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:text="通道二"
app:layout_constraintLeft_toRightOf="@+id/channel1"
app:layout_constraintTop_toTopOf="@+id/channel1" />
<!-- <Button-->
<!-- android:id="@+id/channel2"-->
<!-- android:layout_width="100dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginLeft="15dp"-->
<!-- android:text="通道二"-->
<!-- app:layout_constraintLeft_toRightOf="@+id/channel1"-->
<!-- app:layout_constraintTop_toTopOf="@+id/channel1" />-->
<Button
android:id="@+id/channel3"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:text="通道三"
app:layout_constraintLeft_toRightOf="@+id/channel2"
app:layout_constraintTop_toTopOf="@+id/channel1" />
<!-- <Button-->
<!-- android:id="@+id/channel3"-->
<!-- android:layout_width="100dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginLeft="15dp"-->
<!-- android:text="通道三"-->
<!-- app:layout_constraintLeft_toRightOf="@+id/channel2"-->
<!-- app:layout_constraintTop_toTopOf="@+id/channel1" />-->
<Button
android:id="@+id/channel4"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="通道四"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/channel1" />
<!-- <Button-->
<!-- android:id="@+id/channel4"-->
<!-- android:layout_width="100dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="通道四"-->
<!-- app:layout_constraintLeft_toLeftOf="parent"-->
<!-- app:layout_constraintTop_toBottomOf="@+id/channel1" />-->
<Button
android:id="@+id/channel5"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:text="通道五"
app:layout_constraintLeft_toRightOf="@+id/channel4"
app:layout_constraintTop_toTopOf="@+id/channel4" />
<!-- <Button-->
<!-- android:id="@+id/channel5"-->
<!-- android:layout_width="100dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginLeft="15dp"-->
<!-- android:text="通道五"-->
<!-- app:layout_constraintLeft_toRightOf="@+id/channel4"-->
<!-- app:layout_constraintTop_toTopOf="@+id/channel4" />-->
<Button
android:id="@+id/channel6"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:text="通道六"
app:layout_constraintLeft_toRightOf="@+id/channel5"
app:layout_constraintTop_toTopOf="@+id/channel4" />
<!-- <Button-->
<!-- android:id="@+id/channel6"-->
<!-- android:layout_width="100dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginLeft="15dp"-->
<!-- android:text="通道六"-->
<!-- app:layout_constraintLeft_toRightOf="@+id/channel5"-->
<!-- 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>

@ -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