Android app作為系統應用實現功能筆記

來源:互聯網
上載者:User

標籤:

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);
}

Android app作為系統應用實現功能筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.