因为我的项目大部分是在工业机运行,而工业机的Rom相对版本比较低,权限也都给的很足。因此也不需要过多的设置,就将最基本的代码贴一下。

一、开机启动

1.创建一个广播接受者BroadcastReceiver类

这个类是被创建在了.receiver包中的 ,在 下一步的 广播注册 部分会被使用

public class AutoStartBroadReceiver extends BroadcastReceiver {private static final String ACTION = "android.intent.action.BOOT_COMPLETED";@Overridepublic void onReceive(Context context, Intent intent) {Log.e("接收广播", "onReceive: ");Log.e("接收广播", "onReceive: " + intent.getAction());//开机启动if (ACTION.equals(intent.getAction())) {Log.e("接收广播", "onReceive: 启动了。。。");//第一种方式:根据包名//            PackageManager packageManager = context.getPackageManager();//            Intent mainIntent = packageManager.getLaunchIntentForPackage("com.harry.martin");//            mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//            context.startActivity(mainIntent);//            context.startService(mainIntent);//第二种方式:指定class类,跳转到相应的AcitivityIntent mainIntent = new Intent(context, LoginActivity.class);/*** Intent.FLAG_ACTIVITY_NEW_TASK* Intent.FLAG_ACTIVITY_CLEAR_TOP*/mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(mainIntent);//            context.startService(mainIntent);}}}

版权声明:本文为CSDN博主「拉莫帅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chen_md/article/details/123370779

上面的代码中 定义的常量 建议使用 甚至不用定义,直接使用 Intent.ACTION_BOOT_COMPLETED;就好。

private static final String ACTION = Intent.ACTION_BOOT_COMPLETED;

上面是转来的代码,代码的运行逻辑大致如下:
创建一个类→这个类继承自BroadcastReceiver类→重写了onReceive方法→系统有广播生成就会调用该方法→用if判断是否是一个BOOT_COMPLETED广播(系统启动完毕)→使用Intent 调起我们的目标Activity。

上面的代码中 还提到了 使用包名调起Activity的方法,这个只是Intent各种调起Activity方式的一种,可以搜索Intent来了解。

上面的代码中,对intent都setFlags了,这也是Intent的能力,是关于Android对于Activity的一种装载形式,略微复杂,我用不上,也没怎么研究。我粗浅的理解,主要区别就是用户点击后退按钮时候的表现不同。

2.配置权限

在manifests中加入广播接收权限 用来接收系统的开机广播

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

3.注册广播

同样是在manifests中完成(原文的顺序有一点点问题)

       <receiverandroid:name=".receiver.AutoStartBroadReceiver"android:exported="true"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" /><category android:name="android.intent.category.HOME" /></intent-filter></receiver><activityandroid:name=".mvp.view.Activity.LoginActivity"android:enabled="true"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

版权声明:本文为CSDN博主「拉莫帅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chen_md/article/details/123370779

上面的代码是加入到<application>标签下的,作用就是告诉系统,我这个APP里有一个广播接收者,因此系统如果产生广播了,不管是啥类型的广播,都会给这个APP推送。

App收到推送后,就会调起name属性中定义的类,来处理这个广播:见前面的部分。

另外这里边还有一个intent-filter子标签,我的理解:第一个action是声明了一个事件,第二个category是声明了一个动作类别,让调起的Activity作为主屏。不一定对。具体没研究,就这么用即可。

最后的acitivty标签就是普通activity声明,并标记为启动项。

4.简单完成开机启动

之所以说是简单完成,是因为这对低版本的近乎原版的安卓已经够用了,但是如果是开发手机端的App,要考虑新版本的动态授权问题,以及基于国内手机对Android的修改,要做一些响应的处理。这部分可以看我参考的文件:https://blog.csdn.net/chen_md/article/details/123370779

有个问题就是正常手机谁让你开机启动呢?

二.全屏显示和控制Dialog尺寸

所谓的全屏显示就隐藏状态栏和导航按钮

1. 写一个全屏方法

随便找个地方写一个全屏方法,以便被各种调用,我是将其写到.utils包中的BaseUtil类中的。我的每个项目里都会有这么个类,来提供一些小的能力。

    /*** 隐藏 状态栏 和 导航栏* @param activity*/public static void hideBottomUIMenu(Activity activity){if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower apiView v = activity.getWindow().getDecorView();v.setSystemUiVisibility(View.GONE);} else if (Build.VERSION.SDK_INT >= 19) {//for new api versions.View decorView = activity.getWindow().getDecorView();int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY| View.SYSTEM_UI_FLAG_FULLSCREEN;decorView.setSystemUiVisibility(uiOptions);}}

上面的代码对Android版本做了一些处理识别 19就是android4.4。这个对照表一搜一大堆,通过Android studio的SDK Manager也能看到。

2.在Activity中调用

在想要实现全屏的Activity中调用这个方法即可。建议是写到onStart()

    @Overrideprotected void onStart() {super.onStart();BaseUtil.hideBottomUIMenu(this);}

这样,每次这个Activity显示都会调用这个全屏方法。

3.处理Dialog弹出的问题

上面两步已经能够完成普通的Activity全屏了,但是当弹出Dialog的时候,状态栏和导航栏又会带出来,这是因为,Dialog有一个自己的Widnow容器。这个容器是没有被HideBottomUIMenu方法修饰过的。因此状态栏和导航栏又会出现。因此我们要对弹出的Dialog进行修饰。

tvNumber.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {// 这是我自己写的一个数字键盘的Dialog 后续再单独写一篇NumberKeyboard numberKeyboard = new NumberKeyboard(mContext);numberKeyboard.setKeyboardTitle(tvNumber.getHint().toString());numberKeyboard.setKeyboardNumber(tvNumber.getText().toString());numberKeyboard.setMaxLength(mMax);// 显示numberKeyboard.show();// 显示后获得这个Dialog的window对象 只有显示出来才能拿到这个对象Window numberKeyboardWindow = numberKeyboard.getWindow();// 下面是修改Dialog的尺寸 这个像素映射尺寸计算啥的 也有专门的文章来写,但是我没找到管用的// 因为我是在固定的设备上使用,所以我这个就是自己试的,不考虑兼容性WindowManager.LayoutParams numberKeyboardWindowLayoutParams = numberKeyboardWindow.getAttributes();numberKeyboardWindowLayoutParams.width = 272; //240 32 / 16numberKeyboardWindowLayoutParams.height = 346; //320 26 / 13numberKeyboardWindow.setAttributes(numberKeyboardWindowLayoutParams);// 用全屏方法来修饰这个Dialog的Activity 这一步也不知道有没有用 BaseUtil.hideBottomUIMenu((Activity) mContext);// 最后是数字键盘的回调事件 把输入的数字读出来numberKeyboard.setIOnEnterListener(new NumberKeyboard.IOnEnterListener() {@Overridepublic void onEnter(String value) {if (value != null) {tvNumber.setText((value));}else{tvNumber.setText("");}}});}});

上面的代码,我是写在一个按钮事件里,弹出了一个自定义的Dialog,并且修改了Dialog的尺寸,修饰了全屏。具体的内容写到注释里了。

4.对Dialog本身的修改

在自定义的Dialog里重写一下Show方法

    @Overridepublic void show() {// 强制全屏this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);super.show();fullScreenImmersive(getWindow().getDecorView());this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);}

这个不知道有没有用,在前面部分的代码里调用了全屏方法,做的事情其实差不多,问题在于写到show方法里是否能够获取到getWidnow() ,应该是可以的,否则会报异常。

5.上升空间

根据对第4部分的理解,既然在show方法中能够getWindow(),那么在第3部分中,修改Dialog尺寸的部分,可以写到show方法中。回头测试一下看看。

【Android】简单的开机启动、全屏、Dialog尺寸相关推荐

  1. 全屏Dialog的几种实现

    在平时的开发中,经常遇到一些使用全屏弹窗的场景.今天,总结一下全屏弹窗的几种实现方法,大家可以结合自己的使用场景和习惯选择合适的方法. 实现全屏弹窗,我总结了三种方法: (1)全屏Dialog (2) ...

  2. android画布全屏,Android给任何view添加全屏倾斜水印

    本文主要介绍了Android给任何view添加全屏倾斜水印,具体如下,分享给大家 如果要实现如下效果 目前有两种思路: 1.先画出带有水平文字的照片,然后再和原图合成即可 2.旋转画布,然后直接画布写 ...

  3. Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题

    Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题 参考文章: (1)Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题 ...

  4. android中布局全屏,怎么在Android 应用中实现一个全屏与非全屏功能

    怎么在Android 应用中实现一个全屏与非全屏功能 发布时间:2020-12-04 17:31:45 来源:亿速云 阅读:135 作者:Leah 怎么在Android 应用中实现一个全屏与非全屏功能 ...

  5. Android 不显示标题栏和全屏的设置方法

    Android 不显示标题栏和全屏的设置方法 1.在Manifest.xml中设置 不显示标题栏 android:theme="@android:style/Theme.NoTitleBar ...

  6. linux修改分辨率后电脑黑屏,解决ubuntu开机启动黑屏以及分辨率问题

    前些日子在win7下用EasyBCD硬盘安装了ubuntu作为开发环境,显卡Nvidia的,出现以下问题: 一: 安装之后启动菜单无ubuntu项==>在EasyBCD下手动建立启动项解决. 二 ...

  7. 如何让Android对话框全屏 Dialog 全屏

    如何让一个对话框全屏对话框: <style name="Theme.Application.Dialog.Alert" parent="android:Theme. ...

  8. android dialog 横向全屏,Dialog全屏,去掉状态栏的方式

    dialog即使设置全屏了,但还是有状态栏占用高度这: 直接将下面这行代码放到你的dialog中即可 @Override protected void onStart() { super.onStar ...

  9. [Android] 关于系统工具栏和全屏沉浸模式

    随着应用程序的一些深入设计,大家总想要更好的界面和体验,所以有些东西并不能只是知道方法就结束了,是得要去深入研究研究的.通过这个过程我觉得,从应用层面来讲,想实现一个功能很简单,但若想实现的好,就要去 ...

最新文章

  1. 神经网络python实例分类_Python使用神经网络进行简单文本分类
  2. 网站爬取工具_浅析阻碍网站内容被蜘蛛抓取的原因有哪些?
  3. matlab水力学工具箱,新浪潮水工设计软件
  4. Linux启动和退出系统的方法,实验二 Linux的启动与关闭
  5. Validform实时表单验证插件实例使用
  6. 《自己动手做交互系统》——第2章 音乐蛋糕盘
  7. 例子---随机数/不重复的随机数
  8. 市面上有哪几种门_实木门、原木门、模压门,各有门道不怕坑!
  9. linux make指定目标平台,CMake on Linux:目标平台不支持动态链接
  10. Python相关网站(持续更新)
  11. 一步一步学Silverlight 2系列(5):实现简单的拖放功能_转载
  12. C++ 用template实现的堆
  13. ERP人力资源管理系统
  14. 【待续】海思Hi3520A学习笔记
  15. 汽车零部件行业需求分析及解决方案
  16. 基于物联网的智能厨房安全监测系统-上位机程序
  17. 四大全球卫星导航系统都能提供什么服务?
  18. W ndoWs电脑上的线怎么接,win7一台电脑两个显示器的连接方法介绍
  19. 工作流引擎添新丁:Flowable6.0发布
  20. 二极管的分类及常用方法

热门文章

  1. APP测试与WEB测试的区别
  2. 用pyecharts画地图(世界地图、中国省级地图、市级地图、某省市级地图、某市县级地图)
  3. 台式计算机硬盘主要有哪两种接口,台式机硬盘和笔记本硬盘都有哪些区别?
  4. 政府采购的质疑与投诉
  5. c语言数字的写法田字格,数字100田字格怎么写
  6. 电子邮件客户端软件--foxmail(2)
  7. 解决NVIDIA GeForce系列显卡NVENC并发Session数目限制问题
  8. 国内最前沿的科技——室内导航技术发展及其现状
  9. 定制Eclipse IDE之杂症篇
  10. 媒体实录:百度林元庆第一时间解读百度大脑VS.最强大脑第一场