更新扫码功能,教师端点击二维码可以全屏展示,教师端长按二维码可以分享到QQ/微信等其他软件

master
呗 呗 3 years ago
parent d143081efc
commit 81ba7cb270

@ -95,6 +95,7 @@
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/card_location_poi.xml" value="0.21472663139329806" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/card_my_info_record.xml" value="0.25364583333333335" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/content_home_activity_stu.xml" value="0.17346014492753623" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/dialog_image.xml" value="0.25364583333333335" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/dialog_input.xml" value="0.25364583333333335" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_class_list.xml" value="0.25364583333333335" />
<entry key="..\:/CourseDesign/androidDevelopment/code/final/S.T.Link/app/src/main/res/layout/fragment_course_class_list.xml" value="0.25364583333333335" />

@ -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<Object> baseResponse) {
Message message = new Message();
message.arg1 = 1;
signHandler.sendMessage(message);
}
@Override
public void failedMethod(BaseResponse<Object> 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<Object> baseResponse) {
Message message = new Message();
message.arg1 = 1;
signHandler.sendMessage(message);
}
@Override
public void failedMethod(BaseResponse<Object> 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){

@ -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<Intent> 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();
}
/**
* drawableBitMap
* @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;
}
}

@ -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<PackageInfo> 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<PackageInfo> 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();
}

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

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/iv_code_big"
android:layout_width="300dp"
android:layout_height="300dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save