StupidBeauty
Read times:48Posted at:Sun Jan 12 09:10:49 2025 陈欣的未来使命:21点关机应用的突破

陈欣的未来使命:21点关机应用的突破

场景 1:城市夜景中的思考 - 在 夜 晚 的 上 海 , 高 楼 大 厦 灯 火 通 明 , 霓 虹 灯 闪 烁 。 陈 欣 站 在 她 位 于 黄 浦 江 畔 的 公 寓 阳 台 上 , 背 对 着 城 市 的 繁 华 景 象 , 凝 视 着 远 方 , 若 有 所 思 。 她 的 表 情 既 带 有 对 未 来 的 担 忧 , 也 有 一 丝 坚 定 的 决 心 。 场景 2:实验室内的紧张工作 - 在 一 个 充 满 科 技 感 的 实 验 室 里 , 陈 欣 坐 在 电 脑 前 , 屏 幕 上 显 示 着 复 杂 的 代 码 和 图 表 。 她 专 注 地 敲 打 着 键 盘 , 周 围 散 布 着 各 种 高 科 技 设 备 和 仪 器 。 墙 上 的 时 钟 指 向 深 夜 , 表 明 她 已 经 工 作 了 很 长 时 间 。 场景 3:用户界面设计 - 展 示 “ 2 1 点 关 机 ” 应 用 的 主 要 界 面 , 包 括 悬 浮 窗 权 限 请 求 对 话 框 和 通 知 权 限 请 求 对 话 框 。 界 面 设 计 简 洁 明 了 , 用 户 体 验 友 好 , 突 出 了 应 用 程 序 的 核 心 功 能 和 重 要 性 。 场景 4:成功的喜悦 - 陈 欣 站 在 新 的 办 公 楼 前 , 早 晨 的 阳 光 洒 在 她 身 上 , 照 亮 了 她 的 脸 庞 。 她 面 带 微 笑 , 手 持 一 杯 咖 啡 , 仿 佛 对 未 来 充 满 了 信 心 。 背 景 中 可 以 看 到 现 代 化 的 办 公 大 楼 和 蓝 天 白 云 , 象 征 着 新 的 开 始 和 希 望 。 场景 5:未来的展望 - 陈 欣 站 在 一 个 大 型 会 议 厅 的 讲 台 上 , 面 对 着 一 群 观 众 演 讲 。 大 屏 幕 上 展 示 了 她 和 团 队 开 发 的 技 术 成 果 , 以 及 它 们 如 何 改 善 人 们 的 生 活 。 台 下 的 听 众 聚 精 会 神 地 听 着 , 眼 神 中 充 满 了 期 待 和 敬 佩 。

第一章:挑战的到来

2145年的上海,霓虹灯如同繁星般点缀着这座繁华都市的夜空。科技的进步使得人类的生活发生了翻天覆地的变化,智能助手、自动交通工具以及虚拟现实已经融入了日常生活的每个角落。

陈欣是一位顶尖的人工智能研究员,目前正致力于开发一款名为“21点关机”的应用程序。这款应用旨在帮助用户在晚上9点(即21点)自动关闭设备,以促进更好的睡眠质量。然而,随着用户群体的扩大,两个主要问题逐渐浮现:

1. **显示在屏幕最上方**:一些用户反馈说,在某些情况下,应用程序不能始终显示在屏幕最上方,导致重要提醒被其他应用覆盖。

2. **通知权限**:从Android 13 (API level 33)开始,应用程序需要显式请求`POST_NOTIFICATIONS`权限才能发送通知,而许多用户并没有手动授予这一权限,导致他们错过了重要的提示信息。

这些问题不仅影响用户体验,也威胁到“21点关机”项目的成功推广。作为项目的主要开发者之一,陈欣感到肩上的责任重大。她知道,必须尽快找到解决方案,否则项目的前景将变得不明朗。

第二章:探索解决方案

为了应对这两个问题,陈欣决定深入研究并寻找有效的解决方案。首先,她着手解决悬浮窗权限的问题,使应用程序窗口能够始终显示在屏幕最上方。经过一系列实验,她找到了一个有效的方案——通过代码确保应用程序窗口总是在最前。

// 检查并请求悬浮窗权限的方法
private boolean hasOverlayPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Android 6.0及以上
        return Settings.canDrawOverlays(this); // 检查是否有悬浮窗权限
    } else {
        return true; // 在Android 6.0以下版本中,此权限总是被授予
    }
}

private void requestOverlayPermission() {
    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                               Uri.parse("package:" + getPackageName()));
    startActivityForResult(intent, REQUEST_CODE_OVERLAY_PERMISSION);
}

接下来,陈欣转向了解决通知权限的问题。她更新了应用程序的`AndroidManifest.xml`文件,添加了对`POST_NOTIFICATIONS`权限的声明,并编写了相应的代码来请求和处理这个权限。


// 检查通知权限的方法
private boolean hasNotificationPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { // Android 13及以上
        return ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED;
    } else {
        return true; // 在Android 13以下版本中,此权限总是被授予
    }
}

// 请求通知权限的方法
private void requestNotificationPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.POST_NOTIFICATIONS},
            REQUEST_CODE_POST_NOTIFICATIONS);
    }
}

第三章:整合与测试

陈欣将新功能集成到`FullscreenActivity.java`中,并进行了全面的测试。以下是整合后的代码片段:

package com.stupidbeauty.shutdownat2100androidnative;

import android.Manifest;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.content.Intent;
import androidx.core.app.ActivityCompat;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;

public class FullscreenActivity extends AppCompatActivity {
    private static final int REQUEST_CODE_OVERLAY_PERMISSION = 12345;
    private static final int REQUEST_CODE_POST_NOTIFICATIONS = 12346;

    private void checkPermissions() {
        // 首先检查悬浮窗权限
        if (!hasOverlayPermission()) {
            requestOverlayPermission();
            return; // 如果悬浮窗权限没有被授予,则先处理悬浮窗权限
        }

        // 检查通知权限
        if (!hasNotificationPermission()) {
            requestNotificationPermission();
            return; // 如果通知权限没有被授予,则先处理通知权限
        }

        // 继续执行其他逻辑...
    }

    private boolean hasOverlayPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            return Settings.canDrawOverlays(this);
        } else {
            return true;
        }
    }

    private void requestOverlayPermission() {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                                   Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, REQUEST_CODE_OVERLAY_PERMISSION);
    }

    private boolean hasNotificationPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            return ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED;
        } else {
            return true;
        }
    }

    private void requestNotificationPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.POST_NOTIFICATIONS},
                REQUEST_CODE_POST_NOTIFICATIONS);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_OVERLAY_PERMISSION) {
            if (hasOverlayPermission()) {
                checkPermissions(); // 重新检查其他权限或直接执行下一步操作
            } else {
                Toast.makeText(this, "悬浮窗权限被拒绝", Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_CODE_POST_NOTIFICATIONS) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "通知权限已授予", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "通知权限被拒绝", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

第四章:成功的喜悦

经过几天的努力,陈欣终于解决了“21点关机”应用的两个关键问题。现在,应用程序不仅能始终显示在屏幕最上方,而且能够顺利获得用户的显示通知权限,从而确保所有重要提醒都能及时传达给用户。

陈欣站在新的办公楼前,望着初升的太阳,心中充满了成就感。她知道,这只是开始,更多未知的挑战等待着她去探索和克服。而她,已经准备好迎接这一切。

第五章:未来的展望

解决了这两个技术难题后,陈欣并没有停下脚步。她意识到,科技进步带来的不仅是机遇,更是责任。每一个新的功能和改进都需要考虑到用户体验和社会影响。在未来的工作中,陈欣将继续致力于推动科技创新,同时保持谨慎和智慧,让科技更好地服务于人类社会的发展。

她相信,只要人类保持创新精神和责任感,未来的道路将会充满光明。而她,也将在这条道路上继续前行,为创造更美好的世界贡献自己的力量。

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4