概述

因为需求所以贴出该代码,该源码需要系统共享,且开源板子上才能安装,其次需要将编译的apk进行platform签名,仅仅是记录一下开发过程.
public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private Object statusBarManagerService;    private Method methodDisable;    private TextView tvInfo;// SCREENPINNING_MODE_FLAG = StatusBarManager.DISABLE_NONE// | StatusBarManager.DISABLE_EXPAND// | StatusBarManager.DISABLE_NOTIFICATION_ICONS// | StatusBarManager.DISABLE_NOTIFICATION_ALERTS// // | StatusBarManager.DISABLE_CLOCK// // | StatusBarManager.DISABLE_SYSTEM_INFO// | StatusBarManager.DISABLE_HOME// | StatusBarManager.DISABLE_SEARCH// | StatusBarManager.DISABLE_BACK// | StatusBarManager.DISABLE_RECENT;    private final static int SCREENPINNING_MODE_FLAG = 57081856;    private final static int NORMAL_MODE_FLAG = 0;    private final static int SCREENPINNING_MODE_WITH_BACK_FLAG = 52887552;    private final static int DATE_SETTINGS_REQUEST = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)                        .setAction("Action", null).show();            }        });        tvInfo = (TextView) findViewById(R.id.tv_info);        // Get android @hide class android.app.StatusBarManager by reflection.        try        {//反射拿到状态栏管理器            Class clsStatusBarManager = Class.forName("android.app.StatusBarManager");            Context appContext = getApplicationContext();            if (appContext != null) {                statusBarManagerService = appContext.getSystemService("statusbar");                methodDisable = clsStatusBarManager.getMethod("disable", int.class);            }        } catch (ClassNotFoundException e) {            reflectionError(e);        } catch (NoSuchMethodException e) {            reflectionError(e);        }    }    private void reflectionError(Exception ex) {        tvInfo.setBackgroundColor(Color.RED);        tvInfo.setText("reflection error: " + ex.toString());    }    private void disableStatusBar(int flag) {        try {//实现的核心.            methodDisable.invoke(statusBarManagerService, flag);        } catch (IllegalAccessException e) {            reflectionError(e);        } catch (InvocationTargetException e) {            reflectionError(e);        }    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.bt_pin: {                disableStatusBar(SCREENPINNING_MODE_FLAG);                break;            }            case R.id.bt_unpin: {                disableStatusBar(NORMAL_MODE_FLAG);                break;            }        }    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        //noinspection SimplifiableIfStatement        if (id == R.id.action_settings) {            // Enable BACK button to return from Settings            disableStatusBar(SCREENPINNING_MODE_WITH_BACK_FLAG);            startActivityForResult(new Intent(Settings.ACTION_DATE_SETTINGS), DATE_SETTINGS_REQUEST);            return true;        }        return super.onOptionsItemSelected(item);    }    protected void onActivityResult(int requestCode, int resultCode,                                    Intent data) {        if (requestCode == DATE_SETTINGS_REQUEST) {            // Disable BACK button when returning from Settings            disableStatusBar(SCREENPINNING_MODE_FLAG);        }    }}

最后需要在配置文件添加:xml
android:sharedUserId="android.uid.system"

更多相关文章

  1. Android(安卓)电话的反射调用机制实现静默接听电话
  2. android CTS test
  3. Android调用ITelephony类的endCall()方法 实现来电拒接
  4. 控制UI界面的方法
  5. 开发前奏曲之添加Android(安卓)SDK平台工具
  6. Android的相关布局管理器
  7. Android(安卓)U盘文件显示在文件管理器
  8. Android线性布局与表格布局
  9. 【转】android自带的软件或者服务

随机推荐

  1. 强制 Android(安卓)应用使用某个 Locale
  2. android手动拖动滚动条快速滑动
  3. android自动批量打包工具震撼出世,分享给
  4. Android(安卓)应用程序中-设置-蓝牙,若隐
  5. Android系统在超级终端下必会的命令大全(a
  6. Ubuntu10.04 32位编译Android(安卓)4.0源
  7. Android(安卓)AccessibilityService 应用
  8. android底层开发-android基础架构
  9. Android手势滑动(左滑和右滑)
  10. android 反转字符串