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);
}
3.挂断通话
public static void endCall(Context context) {
TelecomManager telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
try {
SmartRft.invokeMethod(telecomManager,"endCall");
} catch (Exception e) {
e.printStackTrace();
}
}
Android app作为系统应用实现功能笔记的更多相关文章
- wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法
wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法,可用于其他商城或者系统的编程参考 package cn.zzu.edu.wemall.utils ...
- Android APP使用系统签名
Android M平台在写APP测试使用MediaRecoder通过AudioSource.VOICE_CALL来录制通话上下行音的时候,需要权限 <uses-permission androi ...
- Android app应用多语言切换功能实现
最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成, ...
- Android app去应用市场评分功能
因为android市场很多,去各个应用市场评分的功能却不是很难实现. private void gotoRate(){ Uri uri = Uri.parse("market://detai ...
- wemall doraemon中Android app商城系统解决左侧抽屉菜单和viewpager不能兼容问题
完美解决左侧抽屉菜单和viewpager不能兼容左右滑动的问题,可进行参考. WeMall-Client/res/layout/wemall_main_ui.xml </RadioGroup&g ...
- Android app被系统kill的场景
何时发生 当我们的app被切到后台的时候,比如用户按下了home键或者切换到了别的应用,总之是我们的app不再和用户交互了,这个时候对于我们的app来说就是什么事情都可能发生的时候了,因为系统会认为你 ...
- wemall doraemon中Android app商城系统向指定URL发送GET方法的请求代码
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...
- Android APP 两种用程序拨号的方式
想在APP中添加一个拨号功能该怎样做呢?Android提供了两种方式,一种是ACTION_CALL方式直接拨打,另一种是ACTION_DIAL方式打开系统的拨号界面. 下面我们来做个小例子 首先需要在 ...
- [系统集成] Android 自动构建系统
一.简介 android app 自动构建服务器用于自动下载app代码.自动打包.发布,要建立这样的服务器,关键要解决以下几个问题: 1. android app 自动化打包android 的打包一般 ...
随机推荐
- data矩阵poj 2778 DNA Sequence
最近研究data矩阵,稍微总结一下,以后继续补充: ac自动机处理字符串,dp计算谜底,用矩阵来减速 每日一道理 巴尔扎克说过“不幸,是天才的进升阶梯,信徒的洗礼之水,弱者的无底深渊”.风雨过 ...
- 框架基础:ajax设计方案(三)---集成ajax上传技术
之前发布了ajax的通用解决方案,核心的ajax发布请求,以及集成了轮询.这次去外国网站逛逛,然后发现了ajax level2的上传文件,所以就有了把ajax的上传文件集成进去的想法,ajax方案的l ...
- 维吉尼亚密码java完整版
package cn.longxuzi; import org.junit.Test; public class Chi_SquareUtils { private static final ICUt ...
- mybatis 入门进阶之 mapper
由于上节 <mybatis 入门优化>中的dao实现类耦合了user.xml中的statment的id,例如:src.main.resource.userMapper.findUserBy ...
- 在MyEclipse 2013中使用图形界面快速配置Struts2的操作方法
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...
- 二度云抢先成为首批中国工信部(.vip/.xyz/.club)域名注册管理机构
今天,工信部官网的公示文件显示,新通用顶级域名.vip..xyz以及.club域名注册局已正式获得工信部审批,成为中国境内合法的顶级域名注册管理机构,这标志着.vip..xyz以及.club域名成为首 ...
- 驱动10.nor flash
1 比较nor/nand flash NOR NAND接口: RAM-Like,引脚多 引脚少, ...
- cocos2d-x中DrawNode常见的图像绘制函数
//绘制矩形 ('起始点' , '目标点' , '填充颜色') auto rect=DrawNode::create(); rect->drawRect(Vec2(0,0),Vec2(100, ...
- Javaweb开发中URL路径的使用
看到博客园孤傲苍狼的web系列文章中有关于URL路径的使用文章后,感觉自己对URL的使用清楚了很多,自己再对着动手写一遍以加深记忆. JavaWeb开发中常看到URL以"/"开头, ...
- ie7,IE8不支持document.getElmentsByClassName的问题
if (!document.getElementsByClassName) { document.getElementsByClassName = function(className, elemen ...