Android app作为系统应用实现功能笔记

1.禁用StatusBar相关功能需要添加权限
<uses-permission android:name="android.permission.STATUS_BAR"></uses-permission>
enum StatusBarCmd {    DISABLE_EXPAND,    DISABLE_NONE,    DISABLE_RECENT,    DISABLE_NOTIFICATION_ICONS}

public static void disableStatusBar(Context context, StatusBarCmd cmd) {    try {            Object service = context.getSystemService("statusbar");            Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");            Method disable = statusbarManager.getMethod("disable",int.class);            disable.setAccessible(true);            Field disable_expand = statusbarManager.getField(cmd.name());            disable_expand.setAccessible(true);            int disable_code  = disable_expand.getInt(statusbarManager);            Log.d("YYY","disable code = "+disable_code);            disable.invoke(service,disable_code);    }catch (Exception ex) {        ex.printStackTrace();    }}

2.代码动态切换launcher

 需要权限

<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"></uses-permission>
private void switchLauncher(Context context,ComponentName activity) {    PackageManager pm = context.getPackageManager();    Log.d("YYY","switch launcher "+activity);    try {        Class<?> packageManager = Class.forName("android.content.pm.PackageManager");        Method replacePreferedActivity = packageManager.getMethod("replacePreferredActivity",IntentFilter.class,int.class,ComponentName[].class,ComponentName.class);        IntentFilter homeFilter = new IntentFilter(Intent.ACTION_MAIN);        homeFilter.addCategory(Intent.CATEGORY_HOME);        homeFilter.addCategory(Intent.CATEGORY_DEFAULT);

        List<ResolveInfo> resolveInfos = new ArrayList<ResolveInfo>();        ComponentName curLauncher = listHomeActivitys(context,resolveInfos);        if(resolveInfos != null && resolveInfos.size() > 0) {            ComponentName[] componentNames = new ComponentName[resolveInfos.size()];            for(int i =0 ; i<resolveInfos.size();i++) {                ActivityInfo activityInfo = resolveInfos.get(i).activityInfo;                if(activityInfo != null) {                    ComponentName cn = new ComponentName(activityInfo.packageName, activityInfo.name);                    componentNames[i] = cn;                    Log.d("YYY","launcher:"+cn);                }            }            replacePreferedActivity.setAccessible(true);            replacePreferedActivity.invoke(pm,homeFilter,IntentFilter.MATCH_CATEGORY_EMPTY,componentNames,activity);            killPackage(context,curLauncher.getPackageName());        }else {            Log.e("YYY","get home resolve info empty");        }

    } catch (Exception e) {        Log.e("YYY",""+e);        e.printStackTrace();    }

}

private ComponentName listHomeActivitys(Context context,List<ResolveInfo> outs){    PackageManager pm = context.getPackageManager();    Object cn = null;    try {        Class<?> packageManager = Class.forName("android.content.pm.PackageManager");        Method getHomeActivities = packageManager.getMethod("getHomeActivities",List.class);        getHomeActivities.setAccessible(true);        cn = getHomeActivities.invoke(pm,outs);    }catch (Exception e) {        Log.e("YYY",""+e);        e.printStackTrace();    }    return (ComponentName) cn;}

private void killPackage(Context context,String pkg) {    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);    am.killBackgroundProcesses(pkg);}
时间: 2024-08-07 06:01:19

Android app作为系统应用实现功能笔记的相关文章

Android APP使用系统签名

Android M平台在写APP测试使用MediaRecoder通过AudioSource.VOICE_CALL来录制通话上下行音的时候,需要权限 <uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" /> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses

Android订票系统订票功能实现(特效点击按钮实现票数自动加减1)

要实现的效果是点击加按钮就购买分数自动加一,同时计算合计的总计 先共享一份colors.xml的数据,比较全面,可以根据需要添加 <?xml version="1.0" encoding="UTF-8"?> <resources> <color name="popup_main_background">#b0000000</color> <color name="choose_ear

Android app应用多语言切换功能实现

最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成,下次重新打开 App ,也是用户设置的语言. 2. 实现步骤 1. 添加多语言文件 在不同的 value 文件夹下(例如 value .value-en.values-zh-rTW 文件夹)添加不同语言的 string.xml 文件,我们的项目添加了英文.简体中文.繁体中文三种语言,如下图所示: 其

Android app去应用市场评分功能

因为android市场很多,去各个应用市场评分的功能却不是很难实现. private void gotoRate(){ Uri uri = Uri.parse("market://details?id=" + getPackageName()); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); try { startActivity(goToMarket); } catch (ActivityNotFoundExcept

wemall doraemon中Android app商城系统向指定URL发送GET方法的请求代码

URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取URL引用的资源. 通常创建一个和 URL 的连接,并发送请求.读取此 URL 引用的资源需要如下几个步骤:(1)通过调用URL对象openConnection()方法来创建URLConnection对象.(2)设置URLConnection的参数和普通请求属性.(3)如果只是发送GET方式请求,使用

Android APP 两种用程序拨号的方式

想在APP中添加一个拨号功能该怎样做呢?Android提供了两种方式,一种是ACTION_CALL方式直接拨打,另一种是ACTION_DIAL方式打开系统的拨号界面. 下面我们来做个小例子 首先需要在AndroidManifest.xml中添加一个使用权限,这个容易忘哈哈. <uses-permission android:name="android.permission.CALL_PHONE" /> 然后搭一个简单的界面测试一下,下面是布局文件代码 <?xml ve

Android App压力测试之Monkey

本文为慕课网<Android App压力测试>的学习笔记,视频地址 http://www.imooc.com/video/13007 Monkey是发送伪随机用户事件的工具. MonkeyScript实现自动测试的脚本,是一组可以被Monkey识别的命令集合,可以完成重复固定的操作.不支持截屏. MonkeyRunner提供一系列api操作. Monkey与MonkeyRunner的区别: Monkey:在adb shell中,生产用户或系统的伪随机事件 MonkeyRunner:通过API定

[系统集成] Android 自动构建系统

一.简介 android app 自动构建服务器用于自动下载app代码.自动打包.发布,要建立这样的服务器,关键要解决以下几个问题: 1. android app 自动化打包android 的打包一般是人工通过eclipse或者studio的ui界面打包的,如果要让系统自动打包,必须在控制台环境下:只要按照 google 的文档,把 eclipse 或者 studio 工程转化为 ant 或者 gradle 工程,就可以在控制台环境下打包了:这里,我们选择 ant,主要是它容错好,遇到图片格式等

Android APP开发笔记

环境搭建 windows系统上需要以下软件: android SDK -- app开发工具包, 开发运行环境(包括SDK管理工具,和虚拟设备管理). JDK -- java 开发工具包, 负责app代码编译运行. eclipse -- app开发集成环境, 开发app代码, 编译后在 android SDK上运行调试. ADT -- eclipse 的 android 开发工具插件, 将android SDK植入eclipse. 具体搭建步骤: Android开发环境搭建指南 本文以window