Android(安卓)禁止状态栏下拉
16lz
2021-01-24
概述
因为需求所以贴出该代码,该源码需要系统共享,且开源板子上才能安装,其次需要将编译的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"
更多相关文章
- Android(安卓)电话的反射调用机制实现静默接听电话
- android CTS test
- Android调用ITelephony类的endCall()方法 实现来电拒接
- 控制UI界面的方法
- 开发前奏曲之添加Android(安卓)SDK平台工具
- Android的相关布局管理器
- Android(安卓)U盘文件显示在文件管理器
- Android线性布局与表格布局
- 【转】android自带的软件或者服务