Android11手动设置时间,重启后没有保存,怎么改代码

Android11,全志H713平台,手动设置时间,重启后没有保存,怎么修改代码

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/1101898
  • 你也可以参考下这篇文章:Android11无操作后自动播放视频,有操作结束视频
  • 你还可以看下android参考手册中的 android Native 表示一个定义常量值的字段可以从本地代码中引用 从本地代码中引用。
  • 除此之外, 这篇博客: Android辅助权限实战之微信自动评论与点赞中的 二、自动化逻辑代码实现 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 说明:我们通过 Monitor 工具,取到的节点 id ,在微信的每个版本是不一样的 (微信动态生成节点 id,我是通过服务器后台对不同的微信版本,维护一份 id 配置,根据请求的微信版本,返回对应得 id 值),所以本文以微信 v6.7.2 的版本作为例子,如下代码可作参考。

    这里只是提供了微信自动点赞与自动评论的示例,当然本人也写了类似于微信自动加好友,自动加附近的人,检测死粉的功能,钉钉自动打卡… 这里只是抛转引玉,大家根据我提供的思路,去实现,由于源码涉及服务器相关操作,不太方便开源,有问题可以加我QQ:1029226002,

    {
        "tasks": [
            {
                "nodes": [
                    {
                        "action": "scrllor", 
                        "className": "android.widget.ListView", 
                        "id": "com.tencent.mm:id/cno", 
                        "key": "nearHumanList", 
                        "text": "@附近的人列表"
                    }, 
                    {
                        "className": "android.widget.TextView", 
                        "id": "com.tencent.mm:id/b3i", 
                        "key": "nearHumanListName", 
                        "text": "@附近的人列表名字"
                    }, 
                    {
                        "className": "android.widget.TextView", 
                        "id": "com.tencent.mm:id/sm", 
                        "key": "detailName", 
                        "text": "@附近的人详情名字"
                    }, 
                    {
                        "className": "android.widget.ListView", 
                        "id": "com.tencent.mm:id/bcs", 
                        "key": "phoneHumanList", 
                        "text": "@手机联系人列表"
                    }, 
                    {
                        "className": "android.widget.TextView", 
                        "id": "com.tencent.mm:id/bgl", 
                        "key": "phoneHumanListName", 
                        "text": "@手机联系人列表名字"
                    }, 
                    {
                        "className": "android.widget.TextView", 
                        "id": "com.tencent.mm:id/bgm", 
                        "key": "phoneHumanListAccount", 
                        "text": "@手机联系人列表昵称"
                    }, 
                    {
                        "className": "android.widget.TextView", 
                        "id": "com.tencent.mm:id/sm", 
                        "key": "phoneHumandetailName", 
                        "text": "@手机联系人详情名字"
                    }, 
                    {
                        "className": "android.widget.ListView",
                        "id": "com.tencent.mm:id/doq",
                        "key": "momentList",
                        "text": "@朋友圈列表"
                    }
                ],
                "pages": [ ],
                "taskName": "微信脚本",
                "version": "6.7.2"
            }
        ]
    }
    
  • 您还可以看一下 CSDN讲师老师的【Android峰会】如何高效高质进行Android技术开发课程中的 【第二场】Android视频硬解稳定性问题探讨和处理(上)小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    针对 Android11 操作系统下的全志 H713 平台,需要进行以下操作才能通过代码手动设置时间后重启后成功保存时间设置:

    1. 获取系统时间

    使用如下代码获取系统时间:

    Calendar calendar = Calendar.getInstance();
    Date date = new Date();
    
    1. 设置系统时间

    使用如下代码设置系统时间:

    calendar.setTime(date);
    long timeInMillis = calendar.getTimeInMillis();
    SystemClock.setCurrentTimeMillis(timeInMillis);
    

    需要注意,设置系统时间需要有对应的权限:

    <uses-permission android:name="android.permission.SET_TIME" />
    <uses-permission android:name="android.permission.SET_TIME_ZONE" />
    
    1. 重启设备

    使用如下代码重启设备:

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    pm.reboot(null);
    

    需要注意,重启设备需要有对应的权限:

    <uses-permission android:name="android.permission.REBOOT" />
    
    1. 保存时间设置

    由于 Android 11 强制分区存储,外部资源无法访问,因此需要使用内部存储来保存时间设置。可以使用 SharedPreferences 来保存时间设置,代码如下:

    SharedPreferences sharedPreferences = getSharedPreferences("time", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putLong("time", timeInMillis);
    editor.apply();
    
    1. 读取时间设置

    使用如下代码从 SharedPreferences 中读取时间设置:

    SharedPreferences sharedPreferences = getSharedPreferences("time", MODE_PRIVATE);
    long timeInMillis = sharedPreferences.getLong("time", System.currentTimeMillis());
    

    如果没有保存过时间设置,则使用系统当前时间作为默认值。

    需要注意,对于 Android 11,还需要在 AndroidManifest.xml 中添加以下代码以请求 MANAGE_EXTERNAL_STORAGE 权限:

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

    如果需要在应用中使用文件操作,还需要通过以下方法获取外部存储权限:

    private fun requestExternalStoragePermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            if (Environment.isExternalStorageManager()) {
                //已经获取了权限
            } else {
                val intent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
                startActivityForResult(intent, REQUEST_CODE_PERMISSION_MANAGE_EXTERNAL_STORAGE)
            }
        } else {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
                //已经获取了权限
            } else {
                ActivityCompat.requestPermissions(
                    this,
                    arrayOf(
                        Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        Manifest.permission.READ_EXTERNAL_STORAGE
                    ),
                    REQUEST_CODE_PERMISSION_EXTERNAL_STORAGE
                )
            }
        }
    }
    

如果您想在Android 11中手动设置时间并在重启后保存,您可以尝试以下步骤:

  1. 在您的应用程序中添加以下权限:
<uses-permission android:name="android.permission.SET_TIME"/>
<uses-permission android:name="android.permission.SET_TIME_ZONE"/>
  1. 在您的应用程序中使用以下代码设置时间和时区:
// 设置时间
long timeInMillis = System.currentTimeMillis();
SystemClock.setCurrentTimeMillis(timeInMillis);

// 设置时区
String timeZone = "Asia/Shanghai";
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setTimeZone(timeZone);
  1. 在您的应用程序中添加以下代码以确保时间和时区在重启后仍然保存:
// 在应用程序启动时检查时间和时区是否正确
long currentTimeMillis = System.currentTimeMillis();
String timeZone = TimeZone.getDefault().getID();
// 检查时间和时区是否正确
// 如果不正确,则重新设置时间和时区

请注意,这种方法需要您的应用程序具有系统级别的权限,因此您需要在AndroidManifest.xml文件中声明这些权限。此外,这种方法可能会影响其他应用程序的时间和时区设置,因此请谨慎使用。