diff --git a/app/build.gradle b/app/build.gradle index cd8b22f..420184d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,8 +39,10 @@ android { dependencies { implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) implementation 'androidx.appcompat:appcompat:1.6.1' + //noinspection GradleCompatible implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation files('libs\\App_Demo_API.jar') implementation files('libs\\DeviceAPIver20150204.jar') implementation files('libs\\logutil-1.5.1.1.jar') @@ -68,5 +70,12 @@ dependencies { // implementation 'com.lzy.net:okhttputils:1.6.0' //可以单独使用,不需要依赖下方的扩展包 // implementation 'com.lzy.net:okhttpserver:0.1.7' //扩展了下载管理和上传管理,根据需要添加 +// implementation 'com.jakewharton:butterknife:10.2.0' +// annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' +// implementation 'com.github.bumptech.glide:glide:4.8.0' +// annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0' + + // https://mvnrepository.com/artifact/com.github.bumptech.glide/glide + implementation 'com.github.bumptech.glide:glide:4.16.0' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 59bf6ea..9e1b356 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,16 +2,26 @@ - + + + - + - + + + + + + + + + + + + + - + @@ -61,13 +89,10 @@ android:windowSoftInputMode="adjustPan" /> - - + android:exported="true" /> - diff --git a/app/src/main/java/com/example/beijing_daxing/CheckActivity.java b/app/src/main/java/com/example/beijing_daxing/CheckActivity.java index d450c1a..7eafca5 100644 --- a/app/src/main/java/com/example/beijing_daxing/CheckActivity.java +++ b/app/src/main/java/com/example/beijing_daxing/CheckActivity.java @@ -5,6 +5,7 @@ import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableBoolean; import android.annotation.SuppressLint; +import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -20,12 +21,14 @@ import com.example.beijing_daxing.base.MyResult; import com.example.beijing_daxing.been.Stock; import com.example.beijing_daxing.databinding.ActivityCheckBinding; import com.example.beijing_daxing.dialog.InPutDialog; +import com.example.beijing_daxing.dialog.TakePictureDialog; import com.example.beijing_daxing.uitls.SharedPreferencesUtils; import com.google.gson.reflect.TypeToken; import com.lzy.okgo.OkGo; import com.lzy.okgo.model.Response; import com.uhf.api.cls.Reader; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -34,7 +37,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import cn.pda.serialport.Tools; -public class CheckActivity extends BaseActivity implements AdapterClickCall, InPutDialog.InPutDialogCall { +public class CheckActivity extends BaseActivity implements AdapterClickCall, InPutDialog.InPutDialogCall, TakePictureDialog.dialogReturnListSizeCall { private ActivityCheckBinding binding; private CheckAdapter adapter; private List list; @@ -43,6 +46,7 @@ public class CheckActivity extends BaseActivity implements AdapterClickCall, InP private ObservableBoolean checkState; private InPutDialog inputDialog; private boolean sanType; + private TakePictureDialog takeDialog; @Override protected void onCreate(Bundle savedInstanceState) { @@ -71,6 +75,8 @@ public class CheckActivity extends BaseActivity implements AdapterClickCall, InP inputDialog = new InPutDialog(this); inputDialog.setInPutDialogCall(this); tagList = new ArrayList<>(); + takeDialog=new TakePictureDialog(this); + takeDialog.setCall(this); } // 初始化数据 @@ -204,4 +210,28 @@ public class CheckActivity extends BaseActivity implements AdapterClickCall, InP handler.postDelayed(runnable, 1000); } }; + + // 拍照 + public void check_tackPhoto(View view){ + teke_photo(); + } + // 显示拍的照片 + public void check_showPhoto(View view){ + takeDialog.setBitmaps(bitmaps, files); + takeDialog.show(); + } + private List files=new ArrayList<>(); + private List bitmaps=new ArrayList<>(); + @Override + public void takePhotoCall(File outputImage, Bitmap bitmap) { + files.add(outputImage); + bitmaps.add(bitmap); + binding. confirmPictureNumber2.setText(bitmaps.size() + ""); + } + + @Override + public void returnListSize(int size) { + binding. confirmPictureNumber2.setText(bitmaps.size() + ""); + + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/beijing_daxing/CheckListActivity.java b/app/src/main/java/com/example/beijing_daxing/CheckListActivity.java new file mode 100644 index 0000000..7367da4 --- /dev/null +++ b/app/src/main/java/com/example/beijing_daxing/CheckListActivity.java @@ -0,0 +1,63 @@ +package com.example.beijing_daxing; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.databinding.DataBindingUtil; + +import android.os.Bundle; +import android.view.View; +import android.widget.Toast; + +import com.example.beijing_daxing.adapter.CheckListAdapter; +import com.example.beijing_daxing.base.BaseActivity; +import com.example.beijing_daxing.base.MyRecultCall; +import com.example.beijing_daxing.base.MyResult; +import com.example.beijing_daxing.been.Stock; +import com.example.beijing_daxing.databinding.ActivityCheckListBinding; +import com.example.beijing_daxing.uitls.SharedPreferencesUtils; +import com.google.gson.reflect.TypeToken; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.model.Response; +import com.uhf.api.cls.Reader; + +import java.util.List; + +public class CheckListActivity extends BaseActivity { + private CheckListAdapter checkListAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ActivityCheckListBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_check_list); + checkListAdapter = new CheckListAdapter(this); + binding.setAdapter(checkListAdapter); + } + + @Override + protected void sanRfid(List epcs) { + + } + + public void check_start(View view) { + OkGo.post(url + "/xj/createTask") + .params("user", SharedPreferencesUtils.getstring("user", "")) + .execute(new MyRecultCall(dialog, this) { + @Override + public void onSuccess(Response response) { + super.onSuccess(response); + var body = response.body(); + if (body.getCode() == 0) { + // list = gson.fromJson(body.getData().toString(), new TypeToken>() { + // }.getType()); + // if (list == null || list.isEmpty()) { + // Toast.makeText(CheckActivity.this, "没有维护巡检区域", Toast.LENGTH_SHORT).show(); + // return; + // } + // adapter.setList(list); + // adapter.notifyDataSetChanged(); + return; + } + // Toast.makeText(this, body.getMsg(), Toast.LENGTH_SHORT).show(); + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/beijing_daxing/HomePageActivity.java b/app/src/main/java/com/example/beijing_daxing/HomePageActivity.java index d336b33..ba3f464 100644 --- a/app/src/main/java/com/example/beijing_daxing/HomePageActivity.java +++ b/app/src/main/java/com/example/beijing_daxing/HomePageActivity.java @@ -7,6 +7,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.net.wifi.WifiManager; import android.os.Bundle; +import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.AdapterView; @@ -64,6 +65,7 @@ public class HomePageActivity extends AppCompatActivity { uhfLongerManager.asyncStopReading(); uhfLongerManager.close(); MyApplication.uhfLongerManager = null; + Log.e("TAG", "关闭" ); // unregisterReceiver(myNetWorkReceiver); } @@ -77,6 +79,7 @@ public class HomePageActivity extends AppCompatActivity { list.add(new HomeIcon(R.mipmap.home_bf, "轮挡报废", BFActivity.class)); list.add(new HomeIcon(R.mipmap.home_in, "废品入库", FpInActivity.class)); list.add(new HomeIcon(R.mipmap.home_out, "废品出库", FpOutActivity.class)); + // list.add(new HomeIcon(R.mipmap.home_out, "功率设置", FpOutActivity.class)); var intent = getIntent(); try { if (!intent.getStringExtra("user").equals("admin")) { diff --git a/app/src/main/java/com/example/beijing_daxing/InActivity.java b/app/src/main/java/com/example/beijing_daxing/InActivity.java index 113add9..1c69c1d 100644 --- a/app/src/main/java/com/example/beijing_daxing/InActivity.java +++ b/app/src/main/java/com/example/beijing_daxing/InActivity.java @@ -50,11 +50,17 @@ public class InActivity extends BaseActivity implements AdapterClickCall { adapter.setList(epcList); adapter.setAdapterClickCall(this); binding.setAdapter(adapter); - setPower(33); + checkState=new ObservableBoolean(); binding.setCheckState(checkState); } + @Override + protected void onResume() { + super.onResume(); + setPower(33); + } + @Override protected void sanRfid(List epcs) { // Log.e("TAG", "sanRfid:" + epcs); @@ -128,7 +134,7 @@ public class InActivity extends BaseActivity implements AdapterClickCall { // Log.e("TAG", "发送广播,读取RFID"); // sendBroadcast(broadcastIntent); sanEpc(); - handler.postDelayed(runnable, 0); + handler.postDelayed(runnable, 50); } }; public void instore_check(View view) { @@ -136,11 +142,12 @@ public class InActivity extends BaseActivity implements AdapterClickCall { if (b) { handler.removeCallbacks(runnable); } else { - handler.postDelayed(runnable, 100); + handler.postDelayed(runnable, 0); } checkState.set(!b); } + @Override protected void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/example/beijing_daxing/OutActivity.java b/app/src/main/java/com/example/beijing_daxing/OutActivity.java index 4b5afb5..081b858 100644 --- a/app/src/main/java/com/example/beijing_daxing/OutActivity.java +++ b/app/src/main/java/com/example/beijing_daxing/OutActivity.java @@ -40,9 +40,13 @@ public class OutActivity extends BaseActivity implements AdapterClickCall { outVm=new OutStoreVm(); binding.setVm(outVm); initRequest(); + + } + @Override + protected void onResume() { + super.onResume(); setPower(17); } - @Override protected void sanRfid(List epcs) { epcs.stream().forEach(t -> { diff --git a/app/src/main/java/com/example/beijing_daxing/SetingPowerActivity.java b/app/src/main/java/com/example/beijing_daxing/SetingPowerActivity.java new file mode 100644 index 0000000..4a09dda --- /dev/null +++ b/app/src/main/java/com/example/beijing_daxing/SetingPowerActivity.java @@ -0,0 +1,14 @@ +package com.example.beijing_daxing; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +public class SetingPowerActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_seting_power); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/beijing_daxing/StoreCheckActivity.java b/app/src/main/java/com/example/beijing_daxing/StoreCheckActivity.java index cd7f389..92d4e01 100644 --- a/app/src/main/java/com/example/beijing_daxing/StoreCheckActivity.java +++ b/app/src/main/java/com/example/beijing_daxing/StoreCheckActivity.java @@ -5,6 +5,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.Bindable; import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableBoolean; +import androidx.databinding.ObservableInt; import android.annotation.SuppressLint; import android.os.Bundle; @@ -39,16 +40,22 @@ public class StoreCheckActivity extends BaseActivity { private ObservableBoolean checkState; private List list; private StoreCheckAdapter checkAdapter; + private int checkNumber; + + private ActivityStoreCheckBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - ActivityStoreCheckBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_store_check); + + binding = DataBindingUtil.setContentView(this, R.layout.activity_store_check); checkState = new ObservableBoolean(); binding.setCheckState(checkState); checkAdapter = new StoreCheckAdapter(this); binding.setAdapter(checkAdapter); initRequest(); + checkNumber=0; + binding.setCheckNumber(checkNumber); setPower(33); } @@ -57,7 +64,6 @@ public class StoreCheckActivity extends BaseActivity { @Override protected void sanRfid(List epcs) { if (tagList == null) return; - Log.e("TAG", "sanRfid:"); epcs.forEach(t -> { var epc = Tools.Bytes2HexString(t.EpcId, t.EpcId.length); if (tagList.contains(epc)) { @@ -70,9 +76,12 @@ public class StoreCheckActivity extends BaseActivity { var index = list.indexOf(stock); if (index != -1) { list.get(index).setState("Y"); + checkNumber--; + binding.setCheckNumber(checkNumber); + checkAdapter.notifyDataSetChanged(); } }); - checkAdapter.notifyDataSetChanged(); + } private void initRequest() { @@ -86,6 +95,10 @@ public class StoreCheckActivity extends BaseActivity { }.getType()); tagList = new ArrayList<>(); checkAdapter.setList(list); + checkNumber=list.size(); + + binding.setCheckNumber(checkNumber); + binding.setListNumber(checkNumber); checkAdapter.notifyDataSetChanged(); } else { Toast.makeText(StoreCheckActivity.this, body.getMsg(), Toast.LENGTH_SHORT).show(); @@ -99,7 +112,7 @@ public class StoreCheckActivity extends BaseActivity { if (b) { handler.removeCallbacks(runnable); } else { - handler.postDelayed(runnable, 100); + handler.postDelayed(runnable, 0); } checkState.set(!b); } diff --git a/app/src/main/java/com/example/beijing_daxing/adapter/CheckListAdapter.java b/app/src/main/java/com/example/beijing_daxing/adapter/CheckListAdapter.java new file mode 100644 index 0000000..1952b75 --- /dev/null +++ b/app/src/main/java/com/example/beijing_daxing/adapter/CheckListAdapter.java @@ -0,0 +1,67 @@ +package com.example.beijing_daxing.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + +import com.example.beijing_daxing.BR; +import com.example.beijing_daxing.R; +import com.example.beijing_daxing.base.AdapterClickCall; +import com.example.beijing_daxing.been.Stock; +import com.example.beijing_daxing.databinding.ItemCheckBinding; + +import java.util.List; + +/** + * @author wanghao + * @date 2024/1/19 14:32 + */ +public class CheckListAdapter extends RecyclerView.Adapter { + private Context context; + private List list; + private LayoutInflater inflater; + private AdapterClickCall call; + public CheckListAdapter(Context context) { + this.context = context; + inflater = LayoutInflater.from(context); + this.call=call; + } + + public void setList(List list) { + this.list = list; + } + + @Override + public MyViewHoder onCreateViewHolder(ViewGroup parent, int viewType) { + ItemCheckBinding binding = DataBindingUtil.inflate(inflater, R.layout.item_check, parent, false); + return new MyViewHoder(binding); + } + + @Override + public void onBindViewHolder(MyViewHoder holder, int position) { + var binding = holder.getBinding(); + binding.setVariable(BR.item,list.get(position)); + binding.itemCheckClick.setOnClickListener(v -> call.clickItem(position)); + } + + @Override + public int getItemCount() { + return list==null?0:list.size(); + } + + public class MyViewHoder extends RecyclerView.ViewHolder { + private ItemCheckBinding binding; + + public MyViewHoder( ItemCheckBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + public ItemCheckBinding getBinding() { + return binding; + } + } +} diff --git a/app/src/main/java/com/example/beijing_daxing/adapter/PictureAdapter.java b/app/src/main/java/com/example/beijing_daxing/adapter/PictureAdapter.java new file mode 100644 index 0000000..ffb84a3 --- /dev/null +++ b/app/src/main/java/com/example/beijing_daxing/adapter/PictureAdapter.java @@ -0,0 +1,78 @@ +package com.example.beijing_daxing.adapter; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + + +// import com.bumptech.glide.Glide; +import com.bumptech.glide.Glide; +import com.example.beijing_daxing.R; + +import java.util.List; + +/** + * Created by wangh on 2021/1/28-14:02。 + */ +public class PictureAdapter extends RecyclerView.Adapter { + private Context context; + private List list; + private LayoutInflater inflater; + private ViewOnClickCall call; + public interface ViewOnClickCall{ + void onclickCall(int position); + } + public PictureAdapter(Context context, ViewOnClickCall call) { + this.context = context; + this.call=call; + inflater=LayoutInflater.from(context); + } + + public void setList(List list) { + this.list = list; + } + + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View v=inflater.inflate(R.layout.item_photo,parent,false); + return new MyViewHolder(v); + } + + @Override + public void onBindViewHolder(@NonNull MyViewHolder holder, @SuppressLint("RecyclerView") int position) { + Bitmap info=list.get(position); + +// holder.img.setImageBitmap(info); + Glide.with(context).load(info).into( holder.img); + holder.button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + call.onclickCall(position); + } + }); + } + + @Override + public int getItemCount() { + return list.size(); + } + + class MyViewHolder extends RecyclerView.ViewHolder{ + private ImageView img; + private TextView button; + public MyViewHolder(@NonNull View itemView) { + super(itemView); + img=itemView.findViewById(R.id.item_photoImg); + button=itemView.findViewById(R.id.item_photoButton); + } + } +} diff --git a/app/src/main/java/com/example/beijing_daxing/base/BaseActivity.java b/app/src/main/java/com/example/beijing_daxing/base/BaseActivity.java index 2d6f0f7..4fcde3d 100644 --- a/app/src/main/java/com/example/beijing_daxing/base/BaseActivity.java +++ b/app/src/main/java/com/example/beijing_daxing/base/BaseActivity.java @@ -1,5 +1,6 @@ package com.example.beijing_daxing.base; +import android.Manifest; import android.annotation.SuppressLint; import android.app.ProgressDialog; import android.content.BroadcastReceiver; @@ -7,20 +8,37 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.media.MediaPlayer; +import android.net.Uri; +import android.os.Build; import android.os.Bundle; +import android.provider.MediaStore; import android.util.Log; import android.view.KeyEvent; import android.view.Window; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import androidx.core.content.FileProvider; + import com.example.beijing_daxing.R; import com.google.gson.Gson; import com.handheld.uhfr.*; import com.uhf.api.cls.Reader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; import okhttp3.MediaType; @@ -46,9 +64,7 @@ public abstract class BaseActivity extends AppCompatActivity { initSan(); broadcastIntent = new Intent("android.rfid.FUN_KEY"); broadcastIntent.putExtra("keydown", false); - // broadcastIntent.setComponent(new ComponentName("com.example.beijing_daxing",".base.BaseActivity$MyReceiver")); } - // private long readTime = 0; public class MyReceiver extends BroadcastReceiver { @@ -64,7 +80,8 @@ public abstract class BaseActivity extends AppCompatActivity { } } } - public void sanEpc(){ + + public void sanEpc() { List strings = uhfLongerManager.tagInventoryRealTime(); // Log.e("TAG", "驱动" + (uhfLongerManager == null)); if (strings == null || strings.isEmpty()) { @@ -74,6 +91,7 @@ public abstract class BaseActivity extends AppCompatActivity { mediaPlayer.start(); sanRfid(strings); } + private void initDialog() { dialog = new ProgressDialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); @@ -95,12 +113,14 @@ public abstract class BaseActivity extends AppCompatActivity { mediaPlayer = MediaPlayer.create(this, R.raw.msg); } - public void setPower(int power){ + public void setPower(int power) { try { Reader.READER_ERR readerErr = uhfLongerManager.setPower(power, power); Log.e("TAG", "setPower:" + readerErr.name()); - // Log.e("TAG", "readPower:" + uhfLongerManager.getPower()[0]); - }catch (Exception e){ + + int[] power1 = uhfLongerManager.getPower(); + Log.e("TAG", "readPower:" + power1[0] + "," + power1[1]); + } catch (Exception e) { } @@ -114,4 +134,98 @@ public abstract class BaseActivity extends AppCompatActivity { protected abstract void sanRfid(List epcs); + + public static final int CAMERA_PHOTO = 0X02; + public File outputImage; + public Uri img_uri; + public SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); + + // 拍照 + public void teke_photo() { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1); + } + + + outputImage = new File(getExternalCacheDir(), "output_imgage" + format.format(new Date()) + ".jpg"); +// if (outputImage.exists()) { +// outputImage.delete(); +// } + try { + outputImage.createNewFile(); + + } catch (IOException e) { + Log.e("TAG", "teke_photo:文件创建错误"); + e.printStackTrace(); + } + if (Build.VERSION.SDK_INT >= 24) { + img_uri = FileProvider.getUriForFile(this, "com.example.beijing_daxing", outputImage); + Log.e("TAG", "teke_photo1"+img_uri.toString() ); + } else { + img_uri = Uri.fromFile(outputImage); + Log.e("TAG", "teke_photo2" ); + } + if ( + PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) + + ) { + Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); + intent.putExtra(MediaStore.EXTRA_OUTPUT, img_uri); + startActivityForResult(intent, CAMERA_PHOTO); + } else { + // 提示用户开户权限 拍照和读写sd卡权限 + String[] perms = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}; + ActivityCompat.requestPermissions(this, perms, CAMERA_PHOTO); + } + } + + public void takePhotoCall(File outputImage, Bitmap bitmap) { + + } + + // 拍照的回调 + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { +/* + try { + Bitmap bitmap; + InputStream inputStream = getContentResolver().openInputStream(img_uri); + if (inputStream!= null) { + bitmap = BitmapFactory.decodeStream(inputStream); + FileOutputStream outputStream = new FileOutputStream(outputImage); + if (bitmap!= null) { + bitmap.compress(Bitmap.CompressFormat.JPEG, 70, outputStream); + takePhotoCall(outputImage, bitmap); + outputStream.close(); + } else { + Log.e("Error", "Bitmap is null after decoding."); + } + } else { + Log.e("Error", "InputStream is null."); + } + } catch (IOException e) { + Log.e("Error", "Error reading or writing file.", e); + } + +*/ + + + Bitmap bitmap = null; + try { + Log.e("TAG", "onActivityResult:" + img_uri.getPath()); + bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(img_uri)); + FileOutputStream outputStream = new FileOutputStream(outputImage); + bitmap.compress(Bitmap.CompressFormat.JPEG, 70, outputStream); + takePhotoCall(outputImage, bitmap); + outputStream.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/beijing_daxing/dialog/TakePictureDialog.java b/app/src/main/java/com/example/beijing_daxing/dialog/TakePictureDialog.java new file mode 100644 index 0000000..f13dd57 --- /dev/null +++ b/app/src/main/java/com/example/beijing_daxing/dialog/TakePictureDialog.java @@ -0,0 +1,100 @@ +package com.example.beijing_daxing.dialog; + +import android.Manifest; +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.provider.MediaStore; +import android.util.Log; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import androidx.core.content.FileProvider; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.example.beijing_daxing.adapter.PictureAdapter; +import com.example.beijing_daxing.R; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + + +/** + * @author wanghao + * @date 2023/2/1 17:06 + */ +public class TakePictureDialog extends Dialog implements PictureAdapter.ViewOnClickCall { + + RecyclerView pictureRecyclerview; + private Context context; + private List bitmaps; + private List files; + private PictureAdapter adapter; + private dialogReturnListSizeCall call; + + public TakePictureDialog(@NonNull Context context) { + super(context, R.style.dialog); + this.context = context; + adapter = new PictureAdapter(context, this); + } + + public void setCall(dialogReturnListSizeCall call) { + this.call = call; + } + + public void setBitmaps(List bitmaps, List files) { + this.bitmaps = bitmaps; + this.files = files; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_picture); + pictureRecyclerview = findViewById(R.id.picture_recyclerview); + findViewById(R.id.confirm_back).setOnClickListener(v -> { + call.returnListSize(bitmaps.size()); + dismiss(); + }); + pictureRecyclerview.setLayoutManager(new GridLayoutManager(context, 3)); +// LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context); +// linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); +// pictureRecyclerview.setLayoutManager(linearLayoutManager); + } + + + @Override + public void show() { + super.show(); + adapter.setList(bitmaps); + pictureRecyclerview.setAdapter(adapter); + Log.e("TAG", "show"); + } + + @Override + public void onclickCall(int position) { + Log.e("TAG", "在dialog中删除的id:" + position); + bitmaps.remove(position); + files.get(position).delete(); + files.remove(position); + adapter.notifyDataSetChanged(); + } + + public interface dialogReturnListSizeCall { + public void returnListSize(int size); + } +} diff --git a/app/src/main/res/drawable/bg_number.xml b/app/src/main/res/drawable/bg_number.xml new file mode 100644 index 0000000..430d7df --- /dev/null +++ b/app/src/main/res/drawable/bg_number.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/state_y_bg.xml b/app/src/main/res/drawable/state_y_bg.xml new file mode 100644 index 0000000..d759525 --- /dev/null +++ b/app/src/main/res/drawable/state_y_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_check.xml b/app/src/main/res/layout/activity_check.xml index 249b908..20e6d1c 100644 --- a/app/src/main/res/layout/activity_check.xml +++ b/app/src/main/res/layout/activity_check.xml @@ -132,7 +132,8 @@