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 的打包一般 ...
随机推荐
- 调试设置移动端Web开发环境搭建实践
新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 本文重要总结一下挪动端进行前端开发时需要用到的一些工具,以及他们之间互相的组合,同时也包含本人应用的组合. 1. Chrome To ...
- <Video> in HTML5
HTML5 提供了视频播放元素<video>用来显示播放特定格式的视屏. * <video> 所支持的视屏格式: Ogg, MPEG4, WebM *<video> ...
- jquery uploadifive使用
应为考虑到flash将逐渐被淘汰,所以选择了uploadfive完成上传 js文件和css文件自行下载,我上传了免费版(啃爹的官网竟然收费) 文件引入之后: <input type=" ...
- Spring事务的传播行为 @Transactional(转)
Spring事务的传播行为 在service类前加上@Transactional,声明这个service所有方法需要事务管理.每一个业务方法开始时都会打开一个事务. Spring默认情况下会对运行期例 ...
- lua读书笔记
接下来把我所看的<Lua程序设计>中介绍lua的内容,时时的记录下来.当做一个读书笔记吧. 先说一下怎样直接运行lua文件吧,windows cmd进入相应的文件夹,然后输入lua,出现版 ...
- 结构-行为-样式-css&html横纵居中最佳实践
最近在做手机端的H5项目,有个标题是在一根横线中的,就是水平居中加垂直居中(如图一).这应该是前端开发中经常遇到的一个场景了,做的次数多了就有一些体会,我今天就总结了下这种结构的实现思路:首先,用元素 ...
- iOS之Xcode 8.0真机调试运行:This ** is running iOS 10.1.1 (14B100), which may not be supported
2016年10月份 苹果升级了iOS系统为10.1,xcode 8.0 运行会提示: This iPhone 5 (Model A1429) is running iOS 10.1.1 (14B100 ...
- CSS控制文本在一行内显示,若有多余字符则使用省略号表示
强制文本在一行内显示,多余字符使用省略号 text-overflow: ellipsis; overflow: hidden; white-space: nowrap;
- Kattis - Aaah!
Aaah! Photo by Unknown Jon Marius shouted too much at the recent Justin Bieber concert, and now need ...
- java加解密
换工作中,把以前学的知识,整理整理.能否得到一份好的薪资且满意的工作,然后赢取白富美,走向人生的巅峰,就靠它了.哈哈. 对称加密:DES, AES DES (数据加密算法) : 明文按64位进行分组, ...