求助,Android应用实现强行霸屏功能

SentinEM 2020-10-14 08:40:04
客户需求:应用开机启动,隐藏导航栏和下方虚拟按键,退出时需要输密确认才能退出应用

其他功能都实现了,并重载了返回键在退出应用时输密确认,但屏幕下方home键以及任务视图方形按键不能重载方法,只能做监听处理,按下还是能退出应用

请问各位大神有无一种方法,可使得应用从开机自启动之后强行霸屏,按什么键都没用
...全文
43537 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
比特灵 初级 2020-10-29
  • 打赏
  • 举报
回复
如果是自己能控制的设备就简单了,跟16楼删除桌面一个道理,我的做法是重命名Launcher3。在自己的Launcher里做个小功能可以一键还原。
ink_s 2020-10-29
  • 打赏
  • 举报
回复
设置下桌面activity的启动模式吧,设置singleInstance 或者 singleTask 试试?
立青_ 中级 2020-10-27
  • 打赏
  • 举报
回复
引用 12 楼 SentinEM 的回复:
引用 10 楼 心的夙愿 的回复:
解决了没有啊,我也遇到了。。。
2L可以将系统桌面替换成应用界面,但是操作跳转到其他活动界面之后返回好像会重新走一遍主活动界面流程,导致一些变量重新初始化
当存在多个桌面时,系统会提示选择桌面,可以选择永远,更好的做法是直接把原桌面卸载掉,用自己的app替代。
        //系统应用路径(/system/app/)
        final File path =new File( Environment.getRootDirectory(),"/app");
        File file = new File(path, "/Launcher3");
        if (!file.exists()) {
            file = new File(path, "/Launcher");
        }
        if (file.exists()) {
            //系统桌面路径
            final String finalFile = file.getAbsolutePath();
            ThreadPools.execute(() -> {
                //单用户模式
                String cmd="mount -o rw,remount /system";
                //强制删除系统桌面
                String delLauncher="rm -rf "+ finalFile;
                //修改文件权限
                String modifyPermissionsCmd="chmod 777 /system";
                //移动app到system/app下
                String moveCmd="cp  " + getPackageResourcePath() + " " + path.getAbsolutePath();
                //重启
                String reboot ="reboot";
                AppUtils.executeCmd(cmd,delLauncher,modifyPermissionsCmd,moveCmd,reboot);
            });
        }
ThreadPools是线程池,AppUtils.executeCmd是操作命令
立青_ 中级 2020-10-27
  • 打赏
  • 举报
回复
安卓板是自己的,有root或系统权限,那直接把系统桌面替换成自己的就行了
SentinEM 2020-10-27
  • 打赏
  • 举报
回复
引用 2 楼 ink_s 的回复:
<activity android:name=".MainActivity">
<intent-filter>
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>





<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
用这种方式又引入了新的问题,个人猜想是这种方法实际上使用我的应用界面替换了系统桌面界面,但每次通过home键等方式回退到应用界面时都重新初始化了该活动类。

我把MainActivity在androidmanifest设置了如上属性,其中有一个Socket变量用来接收socket请求,处理socket请求需要跳转至其他activity,处理完成后返回MainActivity,该Socket变量就为空了。正常打开应用不会出现这个问题,只有通过home键等返回桌面的操作才会复现这个问题,求大神指导
SentinEM 2020-10-27
  • 打赏
  • 举报
回复
引用 11 楼 Lty01 的回复:
这个让系统层面实现会简单很多
哎....系统不是自家公司做的,从其他公司定做的,如果从系统层面修改就要再去跟系统厂商沟通,商务成本就又要再增加
SentinEM 2020-10-27
  • 打赏
  • 举报
回复
引用 10 楼 心的夙愿 的回复:
解决了没有啊,我也遇到了。。。
2L可以将系统桌面替换成应用界面,但是操作跳转到其他活动界面之后返回好像会重新走一遍主活动界面流程,导致一些变量重新初始化
Lty01 2020-10-27
  • 打赏
  • 举报
回复
这个让系统层面实现会简单很多
心的夙愿 2020-10-27
  • 打赏
  • 举报
回复
解决了没有啊,我也遇到了。。。
比特灵 初级 2020-10-27
  • 打赏
  • 举报
回复
作为工控机或者开放场所设备,这是必须的,别想的太多。
引用 8 楼 Write_BUG小能手 的回复:
做个人吧。。。。。在这样搞 我们这行 就臭了
SentinEM 2020-10-27
  • 打赏
  • 举报
回复
引用 18 楼 立青_ 的回复:
引用 17 楼 SentinEM 的回复:
[quote=引用 16 楼 立青_ 的回复:][quote=引用 12 楼 SentinEM 的回复:][quote=引用 10 楼 心的夙愿 的回复:]解决了没有啊,我也遇到了。。。
2L可以将系统桌面替换成应用界面,但是操作跳转到其他活动界面之后返回好像会重新走一遍主活动界面流程,导致一些变量重新初始化
当存在多个桌面时,系统会提示选择桌面,可以选择永远,更好的做法是直接把原桌面卸载掉,用自己的app替代。
        //系统应用路径(/system/app/)
final File path =new File( Environment.getRootDirectory(),"/app");
File file = new File(path, "/Launcher3");
if (!file.exists()) {
file = new File(path, "/Launcher");
}
if (file.exists()) {
//系统桌面路径
final String finalFile = file.getAbsolutePath();
ThreadPools.execute(() -> {
//单用户模式
String cmd="mount -o rw,remount /system";
//强制删除系统桌面
String delLauncher="rm -rf "+ finalFile;
//修改文件权限
String modifyPermissionsCmd="chmod 777 /system";
//移动app到system/app下
String moveCmd="cp " + getPackageResourcePath() + " " + path.getAbsolutePath();
//重启
String reboot ="reboot";
AppUtils.executeCmd(cmd,delLauncher,modifyPermissionsCmd,moveCmd,reboot);
});
}

ThreadPools是线程池,AppUtils.executeCmd是操作命令[/quote]没有其他回复就拿你的结帖了...
客户有需求是留有系统桌面,可输密退出[/quote]为啥一定要有系统桌面,如果只是简单的打开应用或简单功能,干脆写在自己的app里,说白了系统桌面也是App啊,把功能全写在自己的App,输密退出变成跳转到另一个活动[/quote]可以,这个重写桌面程序还没试过
膜拜大佬
立青_ 中级 2020-10-27
  • 打赏
  • 举报
回复
引用 17 楼 SentinEM 的回复:
引用 16 楼 立青_ 的回复:
[quote=引用 12 楼 SentinEM 的回复:][quote=引用 10 楼 心的夙愿 的回复:]解决了没有啊,我也遇到了。。。
2L可以将系统桌面替换成应用界面,但是操作跳转到其他活动界面之后返回好像会重新走一遍主活动界面流程,导致一些变量重新初始化
当存在多个桌面时,系统会提示选择桌面,可以选择永远,更好的做法是直接把原桌面卸载掉,用自己的app替代。
        //系统应用路径(/system/app/)
        final File path =new File( Environment.getRootDirectory(),"/app");
        File file = new File(path, "/Launcher3");
        if (!file.exists()) {
            file = new File(path, "/Launcher");
        }
        if (file.exists()) {
            //系统桌面路径
            final String finalFile = file.getAbsolutePath();
            ThreadPools.execute(() -> {
                //单用户模式
                String cmd="mount -o rw,remount /system";
                //强制删除系统桌面
                String delLauncher="rm -rf "+ finalFile;
                //修改文件权限
                String modifyPermissionsCmd="chmod 777 /system";
                //移动app到system/app下
                String moveCmd="cp  " + getPackageResourcePath() + " " + path.getAbsolutePath();
                //重启
                String reboot ="reboot";
                AppUtils.executeCmd(cmd,delLauncher,modifyPermissionsCmd,moveCmd,reboot);
            });
        }
ThreadPools是线程池,AppUtils.executeCmd是操作命令[/quote]没有其他回复就拿你的结帖了... 客户有需求是留有系统桌面,可输密退出[/quote]为啥一定要有系统桌面,如果只是简单的打开应用或简单功能,干脆写在自己的app里,说白了系统桌面也是App啊,把功能全写在自己的App,输密退出变成跳转到另一个活动
SentinEM 2020-10-27
  • 打赏
  • 举报
回复
引用 16 楼 立青_ 的回复:
引用 12 楼 SentinEM 的回复:
[quote=引用 10 楼 心的夙愿 的回复:]解决了没有啊,我也遇到了。。。
2L可以将系统桌面替换成应用界面,但是操作跳转到其他活动界面之后返回好像会重新走一遍主活动界面流程,导致一些变量重新初始化
当存在多个桌面时,系统会提示选择桌面,可以选择永远,更好的做法是直接把原桌面卸载掉,用自己的app替代。
        //系统应用路径(/system/app/)
final File path =new File( Environment.getRootDirectory(),"/app");
File file = new File(path, "/Launcher3");
if (!file.exists()) {
file = new File(path, "/Launcher");
}
if (file.exists()) {
//系统桌面路径
final String finalFile = file.getAbsolutePath();
ThreadPools.execute(() -> {
//单用户模式
String cmd="mount -o rw,remount /system";
//强制删除系统桌面
String delLauncher="rm -rf "+ finalFile;
//修改文件权限
String modifyPermissionsCmd="chmod 777 /system";
//移动app到system/app下
String moveCmd="cp " + getPackageResourcePath() + " " + path.getAbsolutePath();
//重启
String reboot ="reboot";
AppUtils.executeCmd(cmd,delLauncher,modifyPermissionsCmd,moveCmd,reboot);
});
}

ThreadPools是线程池,AppUtils.executeCmd是操作命令[/quote]没有其他回复就拿你的结帖了...
客户有需求是留有系统桌面,可输密退出
SilentHunter460 2020-10-26
  • 打赏
  • 举报
回复
那用户还可以按住开关机键强制重启。
Write_BUG小能手 初级 2020-10-26
  • 打赏
  • 举报
回复
做个人吧。。。。。在这样搞 我们这行 就臭了
gaoxing_1985007 2020-10-15
  • 打赏
  • 举报
回复
this.startLockTask(); //这个可以锁定你的应用,但是还是有按键可以取消锁定
闫文敬 2020-10-15
  • 打赏
  • 举报
回复
哈哈哈,这个功能现在已经不行了,实现不了了,做个好人,不要为了金钱胡作非为,谢谢!
霖霖怪 2020-10-14
  • 打赏
  • 举报
回复
<category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> <action android:name="android.intent.action.MAIN" />
ink_s 2020-10-14
  • 打赏
  • 举报
回复
<activity android:name=".MainActivity"> <intent-filter> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" />
立青_ 中级 2020-10-14
  • 打赏
  • 举报
回复
把你应用弄成桌面
加载更多回复(1)

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧