diff --git a/android/src/main/java/top/jerryyan/RN/A/VersionUpgrade/ProgressNotificationUtil.java b/android/src/main/java/top/jerryyan/RN/A/VersionUpgrade/ProgressNotificationUtil.java new file mode 100644 index 0000000..3b91b62 --- /dev/null +++ b/android/src/main/java/top/jerryyan/RN/A/VersionUpgrade/ProgressNotificationUtil.java @@ -0,0 +1,89 @@ +package top.jerryyan.RN.A.VersionUpgrade; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.Context; +import android.graphics.Color; +import android.os.Build; + +import androidx.core.app.NotificationCompat; + +public class ProgressNotificationUtil { + + private static NotificationManager manager; + + private static NotificationManager getManager(Context context) { + if (manager == null) { + manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + } + return manager; + } + + private static NotificationCompat.Builder getNotificationBuilder(Context mContext, String title + , String content, String channelId) { + //大于8.0 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + //id随便指定 + NotificationChannel channel = new NotificationChannel(channelId + , mContext.getPackageName(), NotificationManager.IMPORTANCE_DEFAULT); + channel.canBypassDnd();//可否绕过,请勿打扰模式 + channel.enableLights(true);//闪光 + channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);//锁屏显示通知 + channel.setLightColor(Color.RED);//指定闪光是的灯光颜色 + channel.canShowBadge();//桌面laucher消息角标 + channel.enableVibration(true);//是否允许震动 + channel.setSound(null, null); + //channel.getAudioAttributes();//获取系统通知响铃声音配置 + channel.getGroup();//获取通知渠道组 + channel.setBypassDnd(true);//设置可以绕过,请勿打扰模式 + channel.setVibrationPattern(new long[]{100, 100, 200});//震动的模式,震3次,第一次100,第二次100,第三次200毫秒 + channel.shouldShowLights();//是否会闪光 + //通知管理者创建的渠道 + getManager(mContext).createNotificationChannel(channel); + + } + + return new NotificationCompat.Builder(mContext, channelId).setAutoCancel(true) + .setContentTitle(title) + .setContentText(content).setSmallIcon(R.mipmap.ic_launcher); + + } + + /** + * @param title + * @param content + * @param manageId + * @param channelId + * @param progress + * @param maxProgress + */ + public static void showNotificationProgress(Context mContext, String title + , String content, int manageId, String channelId + , int progress, int maxProgress) { + final NotificationCompat.Builder builder = getNotificationBuilder(mContext, title, content, channelId); + /* Intent intent = new Intent(this, SecondeActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); + builder.setContentIntent(pendingIntent);*/ + builder.setOnlyAlertOnce(true); + builder.setDefaults(Notification.FLAG_ONLY_ALERT_ONCE); + builder.setProgress(maxProgress, progress, false); + builder.setWhen(System.currentTimeMillis()); + getManager(mContext).notify(manageId, builder.build()); + } + + + public static void showNotificationProgressApkDown(Context mContext + , int progress) { + final NotificationCompat.Builder builder = getNotificationBuilder(mContext, "正在下载", "悠游云驾", "yunjia"); + builder.setOnlyAlertOnce(true); + builder.setDefaults(Notification.FLAG_ONLY_ALERT_ONCE); + builder.setProgress(100, progress, false); + builder.setWhen(System.currentTimeMillis()); + getManager(mContext).notify(R.drawable.ic_launcher, builder.build()); + } + + public static void cancleNotification(Context mContext, int manageId) { + getManager(mContext).cancel(manageId); + } +} \ No newline at end of file diff --git a/android/src/main/java/top/jerryyan/RN/A/VersionUpgrade/UpgradeModule.java b/android/src/main/java/top/jerryyan/RN/A/VersionUpgrade/UpgradeModule.java index d9a7f77..f2aebed 100644 --- a/android/src/main/java/top/jerryyan/RN/A/VersionUpgrade/UpgradeModule.java +++ b/android/src/main/java/top/jerryyan/RN/A/VersionUpgrade/UpgradeModule.java @@ -120,18 +120,9 @@ public class UpgradeModule extends ReactContextBaseJavaModule { .url(DOWNLOAD_URL) .method("GET", null) .build(); - Call call = okHttpClient.newCall(request); + final Call call = okHttpClient.newCall(request); final Handler handler = new DoInstallHandler(this); if(!this._hasPermissionToInstall()) this._requestInstallPermission(); - final ProgressDialog dialog = new ProgressDialog(reactContext.getCurrentActivity()); - dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - dialog.setCanceledOnTouchOutside(false); - dialog.setCancelable(false); - dialog.setTitle(TITLE); - dialog.setMessage("正在下载中,请稍后..."); - dialog.setProgress(0); - dialog.setMax(1000); - dialog.show(); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { @@ -155,21 +146,13 @@ public class UpgradeModule extends ReactContextBaseJavaModule { while ((len = stream.read(buffer)) != -1) { fileOutputStream.write(buffer, 0, len); current += len; - dialog.setProgress((int)((1000.0f*current)/total)); + ProgressNotificationUtil.showNotificationProgressApkDown(reactContext, (int)((100.0f*current)/total)); } fileOutputStream.flush(); final Message message = new Message(); message.what = 0; message.obj = file.toURI().toString(); handler.sendMessage(message); - dialog.setButton(ProgressDialog.BUTTON_POSITIVE, "更新", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - handler.sendMessage(message); - } - } - ); } catch (IOException e) { Log.e("REQUEST FAILED", "AAA", e); } finally { @@ -264,9 +247,7 @@ final class DoInstallHandler extends Handler { @Override public void handleMessage(Message message) { - if(!module._hasPermissionToInstall()) { - module._requestInstallPermission(); - }else{ + if(module._hasPermissionToInstall()) { if(message.what == 0){ String fileUri = (String)message.obj; module.installPackage(fileUri);