SystemUI添加Dialog弹窗

此弹窗为开机SystemUI的显示弹窗:

首先,在SystemUI的源码目录添加源码类文件,目录为frameworks/base/packages/SystemUI/src/com/android/systemui/settings,类名暂取为UpdateUI.java内容如下:

/*

* Copyright (C) 2008 The Android Open Source Project

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

*      http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package com.android.systemui.settings;

import android.app.ActivityManager;

import android.app.ActivityManager.RunningTaskInfo;

import android.app.AlertDialog;

import android.app.Dialog;

import android.app.XXDialog;

import android.content.BroadcastReceiver;

import android.content.ComponentName;

import android.content.ContentResolver;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.content.Context;

import android.content.DialogInterface;

import android.content.DialogInterface.OnDismissListener;

import android.content.Intent;

import android.content.IntentFilter;

import android.net.Uri;

import android.os.UserHandle;

import android.provider.Settings;

import android.util.Slog;

import android.view.View;

import android.view.MotionEvent;

import android.view.WindowManager;

import android.widget.Button;

import android.widget.TextView;

import com.android.systemui.R;

import com.android.systemui.SystemUI;

import android.app.XXDialog.ButtonClickListener;

import java.io.FileDescriptor;

import java.io.PrintWriter;

import java.util.Arrays;

import java.util.List;

public class UpdateUI extends SystemUI {

static final String TAG = "UpdateUI";

static final String ACTION = "android.hm.WITH_UPGRADE_ICON";

static final String sourceFlag = "from_check_service";

static final String forceFlag = "force";

static final String Update = "com.XX.ota.MainActivity";

private static boolean fromService = false;

private static boolean forceUpdate = false;

private String vers;

private SharedPreferences sp;

XXDialog mUpdateDialog;

TextView mUpdateTextView;

private long mScreenOffTime = -1;

public void start() {

// Register for Intent broadcasts for...

IntentFilter filter = new IntentFilter();

filter.addAction(ACTION);

mContext.registerReceiver(mIntentReceiver, filter, null, null);

}

private boolean shouldShow(final String str) {

//此处处理广播过来的数据字段,如若与已存在xml的数据相同,则不再提示弹窗,否则弹窗并更新xml数据。

sp = mContext.getSharedPreferences("version", Context.MODE_PRIVATE);

String version = sp.getString("version", "");

if (!str.equals(version)) {

Editor ed = sp.edit();

ed.putString("version", vers);

ed.commit();

return true;

}

return false;

}

private boolean getTopWindow() {

ActivityManager am = (ActivityManager)(mContext).getSystemService(Context.ACTIVITY_SERVICE);

ComponentName cn = am.getRunningTasks(1).get(0).topActivity;

Slog.e(TAG, "activity: " + cn.getClassName().toString());

if (cn.getClassName().contains(Update))

return true;

return false;

}

private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if (action.equals(ACTION)) {

fromService = intent.getBooleanExtra(sourceFlag, false);

forceUpdate = intent.getBooleanExtra(forceFlag, false);

vers = intent.getStringExtra("version");

if (fromService && !getTopWindow()) {

if (forceUpdate) {

showUpdateDialog(forceUpdate);

return;

} else if (shouldShow(vers)) {

showUpdateDialog(forceUpdate);

return;

}

}

}

}

};

void dismissUpdateDialog() {

if (mUpdateDialog != null) {

mUpdateDialog.dismiss();

mUpdateDialog = null;

}

}

void showUpdateDialog(final boolean bool) {

Slog.e(TAG, "==== show update dialog ====");

//此Dialog为第三方添加的于framework的标准dialog,在android.app.XXDialog中。

XXDialog.Builder b = new XXDialog.Builder(mContext);

XXDialog dialog = b.create();

dialog.setRightButtonName(mContext.getString(R.string.sure));

dialog.setLeftButtonName(mContext.getString(R.string.cancel));

dialog.setContent(mContext.getString(R.string.update_notice));

dialog.setTitle(mContext.getString(R.string.system_update));

dialog.notCloseOnTouch();

if (bool) {

dialog.setLeftButtonVisible(false);

dialog.setMiddleLineVisible(false);

}

final Intent intent = new Intent();

ComponentName comp = new ComponentName("com.XX.ota",

"com.XX.ota.MainActivity");

intent.setComponent(comp);

intent.setAction("android.intent.action.VIEW");

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

if (intent.resolveActivity(mContext.getPackageManager()) != null) {

dialog.setClickListener(new ButtonClickListener(){

@Override

public void rightClick() {

mContext.startActivityAsUser(intent, UserHandle.CURRENT);

dismissUpdateDialog();

}

@Override

public void leftClick() {

if (!bool)

dismissUpdateDialog();

}

});

}

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

dialog.getWindow().getAttributes().privateFlags |=

WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;

dialog.show();

mUpdateDialog = dialog;

}

}

而后,将该类添加至SystemUI开机启动的service类名列表中:

修改文件frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIService.java

private final Class<?>[] SERVICES = new Class[] {

com.android.systemui.recent.Recents.class,

com.android.systemui.statusbar.SystemBars.class,

com.android.systemui.usb.StorageNotification.class,

com.android.systemui.power.PowerUI.class,

com.android.systemui.media.RingtonePlayer.class,

com.android.systemui.settings.SettingsUI.class,

com.android.systemui.settings.UpdateUI.class,

com.android.systemui.net.NetWorkWarningUI.class,

};

至此,添加完毕。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-15 21:25:54

SystemUI添加Dialog弹窗的相关文章

Android4.4 SystemUI加入Dialog弹窗

此弹窗为开机SystemUI的显示弹窗: 首先.在SystemUI的源代码文件夹加入源代码类文件,文件夹为frameworks/base/packages/SystemUI/src/com/android/systemui/settings,类名暂取为UpdateUI.java内容例如以下: /* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version

Android4.4 SystemUI添加提示弹窗

此弹窗为开机SystemUI的显示弹窗: 首先,在SystemUI的源码目录添加源码类文件,目录为frameworks/base/packages/SystemUI/src/com/android/systemui/settings,类名暂取为UpdateUI.java 内容如下: /* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (

Dialog(九)——利用WindowManager在屏幕任意位置添加Dialog

MainActivity如下: package cn.testalertdialog; import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import andro

easyui 添加dialog

javascript //查看角色所属用户 function roleuser(obj, id) { var C_ID = id; var Url = "/Sys/RoleUserName" + "/" + C_ID; $.getJSON(Url, function (json) { $.each(json, function (i) { $("#roledlg").append(json.Data) $('#roledlg').dialog('

添加遮罩弹窗

添加遮罩弹窗 css: <style> #headul{ width: 100%; height: 100%; position: absolute; top:0; left: 0; display: none; } .mask{ width: 100%; height: 100%; background: rgba(0,0,0,0.6); z-index: 9999; } .mask_content{ width: 450px; height: 260px; background-color

jQuery的dialog弹窗实现

jQuery实现dialog弹窗: html代码如下: <input type="button" onclick="performances();" value="分配" style="background:#18a689 none repeat scroll 0 0;border:1px solid #18a689;color:#FFF;text-shadow:0px -1px 1px #1c6a9e;height:30px;w

easyUI dialog 弹窗 居中显示

默认情况下应该是在屏幕居中显示的.但是有的时候没有居中只要重新纠正下就可以了 $('#add_dialog').dialog('open'); //打开添加对话框 $('#add_dialog').window('center');//使Dialog居中显示

Android编程入门--底部Dialog弹窗

参考博客:Android实现底部对话框BottomDialog dialog_bottom <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layo

Android重构与设计之路,从整理提示对话框弹窗开始

封装一个独立弹窗Module,这里的弹窗包括普通的Dialog方式弹框和WindowManager方式弹窗.提供一种管理项目里面弹窗的方案,便于后期修改和维护. 首先描述一个在大项目中普遍存在的一个现象:由于项目的功能多,负责功能的人不同,当功能中需要一个普通的确定取消对话框时,大部分人都选择自己写了一个,自己new一个独立的弹窗出来.这样做的好处有以下几个: 代码逻辑独立,自己写的代码自己能控制 快速方便,便于修改,便于满足各种奇怪的需求 可是这个做法导致项目中存在大量的代码冗余,大量的分散的