添加通知

This commit is contained in:
Jerry Yan 2020-03-14 19:23:54 +08:00
parent d3ccf82ae1
commit c4807b10ce
2 changed files with 92 additions and 22 deletions

View File

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

View File

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