Android11,全志H713平台,手动设置时间,重启后没有保存,怎么修改代码
说明:我们通过 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"
}
]
}
针对 Android11 操作系统下的全志 H713 平台,需要进行以下操作才能通过代码手动设置时间后重启后成功保存时间设置:
使用如下代码获取系统时间:
Calendar calendar = Calendar.getInstance();
Date date = new Date();
使用如下代码设置系统时间:
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" />
使用如下代码重启设备:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
pm.reboot(null);
需要注意,重启设备需要有对应的权限:
<uses-permission android:name="android.permission.REBOOT" />
由于 Android 11 强制分区存储,外部资源无法访问,因此需要使用内部存储来保存时间设置。可以使用 SharedPreferences 来保存时间设置,代码如下:
SharedPreferences sharedPreferences = getSharedPreferences("time", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putLong("time", timeInMillis);
editor.apply();
使用如下代码从 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中手动设置时间并在重启后保存,您可以尝试以下步骤:
<uses-permission android:name="android.permission.SET_TIME"/>
<uses-permission android:name="android.permission.SET_TIME_ZONE"/>
// 设置时间
long timeInMillis = System.currentTimeMillis();
SystemClock.setCurrentTimeMillis(timeInMillis);
// 设置时区
String timeZone = "Asia/Shanghai";
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setTimeZone(timeZone);
// 在应用程序启动时检查时间和时区是否正确
long currentTimeMillis = System.currentTimeMillis();
String timeZone = TimeZone.getDefault().getID();
// 检查时间和时区是否正确
// 如果不正确,则重新设置时间和时区
请注意,这种方法需要您的应用程序具有系统级别的权限,因此您需要在AndroidManifest.xml文件中声明这些权限。此外,这种方法可能会影响其他应用程序的时间和时区设置,因此请谨慎使用。