添加通知
This commit is contained in:
parent
d3ccf82ae1
commit
c4807b10ce
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user