diff --git a/.idea/misc.xml b/.idea/misc.xml index f97559a..02fe1c1 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -95,6 +95,7 @@ + diff --git a/app/src/main/java/com/example/stlink/activitys/fragmentChild/activityStuClassList/CourseSignIn.java b/app/src/main/java/com/example/stlink/activitys/fragmentChild/activityStuClassList/CourseSignIn.java index 88d25d1..3320f94 100644 --- a/app/src/main/java/com/example/stlink/activitys/fragmentChild/activityStuClassList/CourseSignIn.java +++ b/app/src/main/java/com/example/stlink/activitys/fragmentChild/activityStuClassList/CourseSignIn.java @@ -23,7 +23,6 @@ import androidx.recyclerview.widget.RecyclerView; import com.alibaba.fastjson.JSON; import com.example.stlink.R; -import com.example.stlink.activitys.ScanQRCodeActivity; import com.example.stlink.configs.adapter.StuCourseSignedAdapter; import com.example.stlink.model.constants.ModelFieldConstants; import com.example.stlink.model.constants.UrlConstants; @@ -261,29 +260,26 @@ public class CourseSignIn extends AppCompatActivity { * @param stuSignRequest 封装好的学生签到请求 */ private void signIn(StuSignRequest stuSignRequest){ - new Thread(new Runnable() { - @Override - public void run() { - System.out.println( "CourseSignIn:stuSignRequest : " + stuSignRequest.toString()); - String json = JSON.toJSONString(stuSignRequest); - String url = UrlConstants.STUDENT_SIGN; + new Thread(() -> { + System.out.println( "CourseSignIn:stuSignRequest : " + stuSignRequest.toString()); + String json = JSON.toJSONString(stuSignRequest); + String url = UrlConstants.STUDENT_SIGN; - new PostBodyParamHttpUtils() { - @Override - public void nextMethod(BaseResponse baseResponse) { - Message message = new Message(); - message.arg1 = 1; - signHandler.sendMessage(message); - } - @Override - public void failedMethod(BaseResponse baseResponse) { - Message message = new Message(); - message.arg1 = -1; - message.obj = baseResponse.getMsg(); - signHandler.sendMessage(message); - } - }.postConnect(url, json); - } + new PostBodyParamHttpUtils() { + @Override + public void nextMethod(BaseResponse baseResponse) { + Message message = new Message(); + message.arg1 = 1; + signHandler.sendMessage(message); + } + @Override + public void failedMethod(BaseResponse baseResponse) { + Message message = new Message(); + message.arg1 = -1; + message.obj = baseResponse.getMsg(); + signHandler.sendMessage(message); + } + }.postConnect(url, json); }).start(); } @@ -303,29 +299,26 @@ public class CourseSignIn extends AppCompatActivity { try{ signCode = Integer.parseInt(signCodeStr); stuSignRequest.setSignCode(signCode); - signHandler = new Handler(new Handler.Callback() { - @Override - public boolean handleMessage(@NonNull Message msg) { - if(msg.arg1 == -1){ - String errorMsg = (String) msg.obj; - Toast.makeText(CourseSignIn.this, errorMsg, Toast.LENGTH_SHORT).show(); - }else if(msg.arg1 == 1){ - Toast.makeText(CourseSignIn.this, "签到成功", Toast.LENGTH_SHORT).show(); - tvSignRecord.setVisibility(View.VISIBLE); - getSignedHandler = new Handler(new Handler.Callback() { - @SuppressLint("NotifyDataSetChanged") - @Override - public boolean handleMessage(@NonNull Message msg) { - if(msg.arg1 == 1){ - adapter.notifyDataSetChanged(); - } - return false; + signHandler = new Handler(msg -> { + if(msg.arg1 == -1){ + String errorMsg = (String) msg.obj; + Toast.makeText(CourseSignIn.this, errorMsg, Toast.LENGTH_SHORT).show(); + }else if(msg.arg1 == 1){ + Toast.makeText(CourseSignIn.this, "签到成功", Toast.LENGTH_SHORT).show(); + tvSignRecord.setVisibility(View.VISIBLE); + getSignedHandler = new Handler(new Handler.Callback() { + @SuppressLint("NotifyDataSetChanged") + @Override + public boolean handleMessage(@NonNull Message msg) { + if(msg.arg1 == 1){ + adapter.notifyDataSetChanged(); } - }); - getHasSignedList(); - } - return false; + return false; + } + }); + getHasSignedList(); } + return false; }); signIn(stuSignRequest); }catch ( NumberFormatException numberFormatException){ diff --git a/app/src/main/java/com/example/stlink/activitys/fragmentChild/activityTeaHome/CheckCourseSign.java b/app/src/main/java/com/example/stlink/activitys/fragmentChild/activityTeaHome/CheckCourseSign.java index c29616b..be35db8 100644 --- a/app/src/main/java/com/example/stlink/activitys/fragmentChild/activityTeaHome/CheckCourseSign.java +++ b/app/src/main/java/com/example/stlink/activitys/fragmentChild/activityTeaHome/CheckCourseSign.java @@ -1,21 +1,38 @@ package com.example.stlink.activitys.fragmentChild.activityTeaHome; +import android.app.Activity; +import android.app.Dialog; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.PixelFormat; +import android.graphics.drawable.Drawable; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.provider.MediaStore; import android.text.TextUtils; +import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.FileProvider; import androidx.fragment.app.Fragment; +import com.example.stlink.BuildConfig; import com.example.stlink.R; +import com.example.stlink.activitys.fragmentChild.activityStuClassList.CourseSignIn; import com.example.stlink.fragments.DidNotSignListFragment; import com.example.stlink.fragments.LeaveListFragment; import com.example.stlink.fragments.SignListFragment; @@ -32,6 +49,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.internal.LinkedTreeMap; +import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -55,6 +73,11 @@ public class CheckCourseSign extends AppCompatActivity { private Bundle bundle; private Handler handler; + private Handler shareImageHandler; + private static ActivityResultLauncher intentActivityResultLauncher; + + Dialog dialog; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -67,6 +90,7 @@ public class CheckCourseSign extends AppCompatActivity { private void initView(){ CommonUtils.changeStatusBar(CheckCourseSign.this); + ivCode = findViewById(R.id.iv_code); abIvTitle = findViewById(R.id.ab_iv_title); aTvCourseName = findViewById(R.id.ab_tv_course_name); @@ -78,22 +102,42 @@ public class CheckCourseSign extends AppCompatActivity { checkCourseSignUtil = new CheckCourseSignUtil(this.getWindow().getDecorView(),CheckCourseSign.this); + dialog = new Dialog(this, android.R.style.Theme_Black_NoTitleBar_Fullscreen); setClickListener(); refreshData(); - handler = new Handler(new Handler.Callback() { + handler = new Handler(msg -> { + if(msg.arg1 == 200){ + aTvCourseName.setText(courseSignMsg.getCourseName()); + tvCourseStuAmountMsg.setText(String.valueOf(courseSignMsg.getCourseNum())); + } + return false; + }); + getCourseSignMsg(); + + shareImageHandler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(@NonNull Message msg) { if(msg.arg1 == 200){ - aTvCourseName.setText(courseSignMsg.getCourseName()); - tvCourseStuAmountMsg.setText(String.valueOf(courseSignMsg.getCourseNum())); + Intent shareIntent = (Intent) msg.obj; + System.out.println("Here...............shareImageHandler....."); + startActivity(Intent.createChooser(shareIntent, "分享图片")); } return false; } }); - getCourseSignMsg(); + + // 意图函数加载器 + intentActivityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + Intent data = result.getData(); + int resultCode = result.getResultCode(); + System.out.println("registerForActivityResult..........................."); + if (resultCode == Activity.RESULT_OK) { + System.out.println("图片分享成功。。。。"); + } + }); } private void refreshData(){ @@ -117,11 +161,28 @@ public class CheckCourseSign extends AppCompatActivity { } private void setClickListener(){ - abIvTitle.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } + abIvTitle.setOnClickListener(v -> finish()); + ivCode.setOnClickListener(v -> { + ivCode.setVisibility(View.INVISIBLE); + View view = LayoutInflater.from(CheckCourseSign.this).inflate(R.layout.dialog_image, null); + ImageView ivCodeBig = view.findViewById(R.id.iv_code_big); + ivCodeBig.setImageDrawable(ivCode.getDrawable()); + dialog.setContentView(view); + dialog.show(); + ivCodeBig.setOnClickListener(v1 -> { + dialog.dismiss(); + ivCode.setVisibility(View.VISIBLE); + }); + ivCodeBig.setOnLongClickListener(v12 -> { + Toast.makeText(CheckCourseSign.this, "长按", Toast.LENGTH_SHORT).show(); + shareImage(); + return true; + }); + }); + ivCode.setOnLongClickListener(v -> { + Toast.makeText(CheckCourseSign.this, "长按", Toast.LENGTH_SHORT).show(); + shareImage(); + return true; }); } @@ -182,4 +243,39 @@ public class CheckCourseSign extends AppCompatActivity { } }).start(); } + + /** + * 分享二维码图片 + */ + private void shareImage(){ + new Thread(() -> { + Intent shareIntent = new Intent(); + shareIntent.setAction(Intent.ACTION_SEND); + shareIntent.setType("image/*"); //设置分享内容的类型 + Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), getBitmap(ivCode.getDrawable()), null,null)); + shareIntent.putExtra(Intent.EXTRA_STREAM, uri); + Message message = new Message(); + message.arg1 = 200; + message.obj = shareIntent; + shareImageHandler.sendMessage(message); + }).start(); + } + + /** + * 从drawable获取BitMap + * @param drawable 从ImageView中获取的 + * @return 返回BitMap + */ + private Bitmap getBitmap(Drawable drawable) { + Bitmap bitmap = Bitmap.createBitmap( + drawable.getIntrinsicWidth(), + drawable.getIntrinsicHeight(), + drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 + : Bitmap.Config.RGB_565); + Canvas canvas = new Canvas(bitmap); + //canvas.setBitmap(bitmap); + drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); + drawable.draw(canvas); + return bitmap; + } } diff --git a/app/src/main/java/com/example/stlink/fragments/UserInfoFragment.java b/app/src/main/java/com/example/stlink/fragments/UserInfoFragment.java index 081f879..a61851b 100644 --- a/app/src/main/java/com/example/stlink/fragments/UserInfoFragment.java +++ b/app/src/main/java/com/example/stlink/fragments/UserInfoFragment.java @@ -189,18 +189,16 @@ public class UserInfoFragment extends Fragment { } private static void shareApk(){ - new Thread(new Runnable() { - @Override - public void run() { - PackageManager mPackageManager = mAppCompatActivity.getPackageManager(); - List packageInfoList = mPackageManager.getInstalledPackages(0); - System.out.println("UserInfoFragment:PackageInfo : " + packageInfoList); - try { - ApplicationInfo applicationInfo = mPackageManager.getApplicationInfo("com.example.stlink", 0); - File apkFile = new File(applicationInfo.sourceDir); - - Intent shareIntent = new Intent(); - shareIntent.setAction(Intent.ACTION_SEND); + new Thread(() -> { + PackageManager mPackageManager = mAppCompatActivity.getPackageManager(); + List packageInfoList = mPackageManager.getInstalledPackages(0); + System.out.println("UserInfoFragment:PackageInfo : " + packageInfoList); + try { + ApplicationInfo applicationInfo = mPackageManager.getApplicationInfo("com.example.stlink", 0); + File apkFile = new File(applicationInfo.sourceDir); + + Intent shareIntent = new Intent(); + shareIntent.setAction(Intent.ACTION_SEND); // // 比如发送文本形式的数据内容 // // 指定发送的内容 // shareIntent.putExtra(Intent.EXTRA_TEXT, "S.T.Link......"); @@ -209,21 +207,20 @@ public class UserInfoFragment extends Fragment { // // intentActivityResultLauncher.launch(Intent.createChooser(shareIntent, "分享")); - shareIntent.setType("*/*"); - // 给目标应用一个临时的读授权,如果要写权限,则是FLAG_GRANT_WRITE_URI_PERMISSION - shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - // 第二个参数就是AndroidManifest中配置的authorities,即包名.fileProvider - Uri contentUri = FileProvider.getUriForFile(mAppCompatActivity, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile); - shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri); - - Message message = new Message(); - message.arg1 = 1; - message.obj = shareIntent; - shareHandler.sendMessage(message); - - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - } + shareIntent.setType("*/*"); + // 给目标应用一个临时的读授权,如果要写权限,则是FLAG_GRANT_WRITE_URI_PERMISSION + shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + // 第二个参数就是AndroidManifest中配置的authorities,即包名.fileProvider + Uri contentUri = FileProvider.getUriForFile(mAppCompatActivity, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile); + shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri); + + Message message = new Message(); + message.arg1 = 1; + message.obj = shareIntent; + shareHandler.sendMessage(message); + + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); } }).start(); } diff --git a/app/src/main/res/layout/activity_tea_check_course_sign.xml b/app/src/main/res/layout/activity_tea_check_course_sign.xml index a371829..6ffbe17 100644 --- a/app/src/main/res/layout/activity_tea_check_course_sign.xml +++ b/app/src/main/res/layout/activity_tea_check_course_sign.xml @@ -159,7 +159,7 @@ app:layout_constraintTop_toTopOf="@id/ll_course_info_msg" app:layout_constraintBottom_toBottomOf="@id/ll_course_info_msg" app:layout_constraintRight_toRightOf="parent" - android:layout_marginEnd="10dp" + android:layout_marginEnd="30dp" /> diff --git a/app/src/main/res/layout/dialog_image.xml b/app/src/main/res/layout/dialog_image.xml new file mode 100644 index 0000000..809a865 --- /dev/null +++ b/app/src/main/res/layout/dialog_image.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file