码迷,mamicode.com
首页 > 移动开发 > 详细

Android4.4 SystemUI添加提示弹窗

时间:2015-07-27 16:30:03      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:android   c语言   class   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 (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.HeimiDialog;
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.HeimiDialog.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.heimi.ota.MainActivity”;

private static boolean fromService = false;
private static boolean forceUpdate = false;
private String vers;

private SharedPreferences sp;
HeimiDialog 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) {
//此处实现了数据的存储,如果是同样的提示数据,则弹窗不再弹出,每次从广播中获取的数据字段都会和已存的文件中数据做比较。
    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为一标准的dialog,包含于开篇的android.app.HeimiDialog中
    HeimiDialog.Builder b = new HeimiDialog.Builder(mContext);
    HeimiDialog 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.heimi.ota",
            "com.heimi.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

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

Android4.4 SystemUI添加提示弹窗

标签:android   c语言   class   systemui   

原文地址:http://blog.csdn.net/dkbdkbdkb/article/details/47085101

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!