如何在通知上显示计时器?

2024-01-23

如何在通知上显示我的计时器?我有一个应用程序启动用户指定的计时器,我想在通知上显示计时器。即使我的应用程序已关闭,我也使用服务来运行计时器,并且我使用 SharedPreference 来传递用户设置给服务的持续时间。

这是我的代码: 第2页(片段)

public class page2 extends Fragment {
    private static final String TAG =   "page2";

    private Button btntest;
    private TextView timer,tv;
    private Spinner spinner, spinner2;
    public int hours, mins, duration;
    private Vibrator v;

    private static int myVariable;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.page2_fragment,container,false);

        btntest = (Button) view.findViewById(R.id.button2);
        timer = (TextView) view.findViewById(R.id.Timer);
        tv = (TextView) view.findViewById(R.id.textView3);

        //setting up 2 spinners
        spinner = (Spinner) view.findViewById(R.id.spinner1);
        String [] values = {"00","01","02","03","04","05","06"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, values);
        adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
        spinner.setAdapter(adapter);
        spinner2 = (Spinner) view.findViewById(R.id.spinner2);
        String [] values2 = {"00","01","10","20","30","40","50","60"};
        ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, values2);
        adapter2.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
        spinner2.setAdapter(adapter2);

        //button start
        btntest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String spin=spinner.getSelectedItem().toString();
                hours = Integer.parseInt(spin);
                hours = hours*3600000;
                String spin2=spinner2.getSelectedItem().toString();
                mins = Integer.parseInt(spin2);
                mins = mins*60000;
                duration = hours+mins;
                setParam(duration);
                startService(duration);
            }
        });
        return view;
    }

    //timer part
    public void setParam(int param){
         CountDownTimer countDownTimer = new CountDownTimer(param,    1000) {

            @Override
            public void onTick(long param) {
                long millis= param;
                String hms= String.format("%02d:%02d:%02d",

                        TimeUnit.MILLISECONDS.toHours(millis),
                        TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis))
                        //seconds
                        ,TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
                );
                timer.setText(hms);
            }

            @Override
            public void onFinish() {
                timer.setText("00:00");
            }
        };
        countDownTimer.start();
    }

    //saving data and passing intent to service
    public void startService(int duration)
    {
        int d = duration;
        SharedPreferences sharedPreferences = getActivity().getSharedPreferences("Timer", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putInt("duration", d);
        editor.apply();
        Intent intent = new Intent(getActivity(),MyService.class);
        getActivity().startService(intent);
        Toast.makeText(getActivity(), "Intent passed and preferences saved!"+d,Toast.LENGTH_SHORT).show();
    }

}

MyService.java

public class MyService extends Service {

    private Vibrator v;
    //private static Timer timer = new Timer();
    NotificationCompat.Builder notification;
    private static final int uniqueID = 71399;
    @Override
    public void onCreate() {
        super.onCreate();

        notification = new NotificationCompat.Builder(this);
        notification.setAutoCancel(true);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        SharedPreferences sharedPreferences = getSharedPreferences("Timer", Context.MODE_PRIVATE);
        int dur = sharedPreferences.getInt("duration", 0);
        CountDownTimer countDownTimer = new CountDownTimer(dur,    1000) {

            @Override
            public void onTick(long param) {
            }

            @Override
            public void onFinish() {
                long n[] = {1,1000,500,1000,500,1000,500,1000,500,1000,500,1000,500,1000,500,1000,500,1000};
                v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                v.vibrate(n, -1);
                startnotif();
                onDestroy();
            }
        };
        countDownTimer.start();
        return START_STICKY;
    }


    public void onDestroy() {

        stopSelf();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    //notification
    public void startnotif()
    {
        notification.setSmallIcon(R.mipmap.ic_launcher);
        notification.setTicker("apps are now unblocked!");
        notification.setWhen(System.currentTimeMillis());
        notification.setContentTitle("You survived!");
        notification.setContentText("Apps are now unblocked!");

        Intent intent1 = new Intent(this, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
        notification.setContentIntent(pendingIntent);

        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        nm.notify(uniqueID, notification.build());

    }

}

您可以使用在创建通知之前指定的唯一通知 ID 来更新通知。

循环您的计时器(例如,从初始值减少计数器,如示例中的共享首选项)并循环每次减量并更新通知,如下所示:

mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    int numMessages = 0;
    mNotifyBuilder.setContentText(String.valueOf(timerValue))  // <-- your timer value
        .setNumber(++numMessages);
    // Because the ID remains unchanged, the existing notification is
    // updated.
    mNotificationManager.notify(
            notifyID,  // <-- Place your notification id here
            mNotifyBuilder.build());

示例根据官方文档修改:Android 中的更新通知 https://developer.android.com/guide/topics/ui/notifiers/notifications.html#Updating

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在通知上显示计时器? 的相关文章

  • Android webview 滚动不起作用

    我正在尝试在网络视图中向下滚动到页面底部 我正在使用谷歌在其教程中提供的网络视图示例 我正在使用这行代码来尝试滚动 但它不起作用 mWebView pageDown true 关于如何使其以编程方式滚动有什么建议吗 谢谢 public cl
  • 如何强制 Eclipse 将 xml 布局和样式显示为文本?

    我最近升级到带有 ADT 20 0 3 的 Eclipse 4 2 Juno 如果我查看旧项目中的布局或样式 Eclipse 只会向我显示其适当的基于控件的编辑器 我想编辑语法突出显示的 xml 文本 我没有找到将插件的编辑器切换到此模式的
  • Android:使用 OAuth 访问 google 任务时出现问题

    由于 google 任务没有公共 api 我想编写解决方法并像浏览器一样请求数据 然后解析结果以进一步显示 为了访问数据 我使用 google 实现了 OAuth 身份验证来访问此 url https mail google com htt
  • Android 上的 SVG 支持

    Android 支持 SVG 吗 有什么例子吗 最完整的答案是这样的 Android 2 x 默认浏览器本身不支持 SVG Android 3 默认浏览器支持 SVG 要将 SVG 支持添加到 2 x 版本的平台 您有两个基本选择 安装功能
  • ffmpeg视频已压缩但无法在浏览器中播放

    我已经集成了ffmpeg4android lib 视频压缩工作正常 但视频无法在除 safari 浏览器之外的浏览器中播放 上传到服务器后 我使用了以下命令 ffmpeg y i
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • Android Library项目使用gradle在命令行编译时无法导入另一个库项目的R类

    我的 android 项目有这样的结构 ProjectDir settings gradle MyApp depends on LibraryA and LibraryB gt build gradle gt All the other a
  • 如何在手机缓存中保存用户名和密码

    我有一个用户登录应用程序 它需要用户的电子邮件和密码 我想将电子邮件和密码保存在手机缓存中 以便用户不必再次输入 有什么办法可以将数据保存在Android缓存中吗 我认为你需要使用SharedPreference用于在设备中使用应用程序时保
  • 如何检查用户在EditText中输入自己的电话号码?

    用户将在我的 Android 应用程序的注册页面上的编辑文本中输入手机号码 如何检查用户输入的是他 她的手机号码而不是其他人的 我试过这个 TelephonyManager tMgr TelephonyManager mAppContext
  • 如何检查 Android 中连接的 wifi 网络是否处于活动状态

    如何自动检查android中连接的WiFi网络上的互联网是否处于活动状态 我可以检查 wifi 是否已启用或 wifi 网络是否已连接 但我不确定如何检查互联网是否已连接 这可能吗 private boolean connectionAva
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 在 AS3 中创建一个(适当的)计时器

    如何在as3中创建时间计数器 在 google 上进行一些简单的搜索 您会找到 AS3 类 Timer 它实际上是事件计数器 不是一个合适的时间计数效用 我见过这个http blogs adobe com pdehaan 2006 07 u
  • Android 后台服务示例,具有交互式调用方法

    我不是 Android 方面的专家 我正在寻找一个 Android 应用程序的示例 该应用程序使用一个服务 其中有真正的功能方法 或者换句话说 一个服务可以用来做什么 我们什么时候需要它 超越简单的东西服务举例 我确信您渴望获得一些工作代码
  • 如何在 Viewpager 中禁用预加载下一页? [复制]

    这个问题在这里已经有答案了 如何在 Viewpager 中禁用页面预加载 I tried viewPager setOffscreenPageLimit 0 但它不起作用 用这个viewPager setOffscreenPageLimit
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • Android:AsyncTask ProgressDialog 将不会在 ActivityGroup 中打开

    我试图在轮询我的服务器时打开一个进度对话框 该类是一个 ActivityGroup 因为它嵌套在选项卡栏中 为了将视图保持在框架内 需要 ActivityGroup 这是我的 ActivityGroup 类的声明 public class
  • 如何在基本活动中使用 ViewBinding 的抽象?

    我正在创建一个基类 以便子级的所有绑定都将设置在基类中 我已经做到了这一点 abstract class BaseActivity2 b AppCompatActivity private var viewBinding B null pr
  • 如何在片段中实现 onBackPressed() 和意图?

    我知道 onBackPressed 是活动中的一种方法 但是 我想在片段中使用该功能 以便当按下后退按钮时 它会通过 Intent 重定向到另一个活动 有什么办法解决这个问题吗 public class News Events fragme

随机推荐

  • BluetoothGatt:协商新的 MTU 成功,但无法使用新的大小(相差 3 个字节)

    我正在开发一个使用 BLE 在设备之间交换数据的应用程序 为了获得更好的性能 在连接两个设备后 我正在协商增加 MTU 以便通过 BLE 交换更大的数据包 连接蓝牙设备并读取所有服务和特征后 我请求使用以下方法增加 MTU private
  • 我想为图像创建一个单独的域

    我想设置一个名为 img mydomain com 的域 这将是一个虚拟域 就像我的实际域一样 除了一个区别 它只提供以 jpg jpeg gif png 等结尾的文件 这样我就可以参考 img mydomain com some imag
  • 如何在wxFrame上设置图标?

    如何向 wxFrame 添加图标 ico 文件 我正在寻找docs http www wxpython org docs api wx Frame class html但找不到任何提及icon Thanks 凤凰wxpython frame
  • 如何访问Microsoft Speech SDK录制的音频流

    我正在使用 Microsoft 的 JavaScript 语音 SDK 转录麦克风流 录音和转录都是使用语音 SDK 完成的 我无法找到在录音完成后如何访问和保存录制的音频文件的方法 创建录音机并录音的代码 recognizer new S
  • jQuery 自定义事件到底是如何工作的

    我找不到任何关于 jquery 中的自定义事件实际实现方式的好资源 比如他们如何模拟事件冒泡等 这边走 bubbling is internal trigger function event data elem bubbling Event
  • 在 Ace 编辑器中检索字符串的行号

    我正在尝试检索 ace 编辑器中显示的文本中给定字符串的行号 示例 搜索 foo 返回 4 5 条件 ace编辑器内容中第4行和第5行包含 foo 字符串 遍历所有行并检查indexOf function findFooLineNumber
  • 使用推送通知时如何处理多个设备?

    我正在开发一个应用程序 我想在其中使用推送通知服务 我有一个服务器 现在我想知道 如何处理多个设备 每部 iPhone 都有唯一的设备 ID 名称吗 假设我想删除特定设备令牌的请求 那么如何处理多个用户呢 有没有办法通过应用程序为每个设备生
  • Angular 2 提前编译器:我必须将所有类属性公开吗?

    Angular 2 rc 6 typescript 2 node 4 5 0 npm 2 15 9 on Windows 7 我正在尝试从即时编译转向提前编译 并且我依赖这些资源 Angular 2 提前编译如何 https stackov
  • 从 OWIN 中的 OAuth Bearer Token 获取 IPrincipal

    我已使用 OWIN 成功将 OAuth 添加到我的 WebAPI 2 项目中 我收到令牌并可以在 HTTP 标头中使用它们来访问资源 现在 我想在其他通道上也使用这些令牌进行身份验证 这些通道不是 OWIN 模板所针对的标准 HTTP 请求
  • 在 Android 中使用 Jaunt 时类名冲突

    我正在尝试使用短动API http jaunt api com 根据建议使用 androidthis https stackoverflow com a 20002760 1291122所以回答 但当我运行项目时出现此错误 Could no
  • BinData() 中的十六进制而不是 base64 - MongoDB

    有没有办法将二进制值的十六进制而不是 base64 发送到 mongo 中的 BinData HexData 3 00112233445566778899aabbccddeeff or UUID 00112233445566778899aa
  • AccessibilityNodeInfo nodeInfo = event.getSource() 始终返回 null

    我正在尝试使用 AccessibilityNodeInfo 但当我使用 event getSource 时它总是返回 null 我尝试读取浏览器的编辑框 这是我的代码 public class MainActivity extends Ac
  • 将大数转换为不带科学记数法的字符串[重复]

    这个问题在这里已经有答案了 e g Number MAX VALUE toString is 1 7976931348623157e 308 我希望没有e 308 如何实现这一目标 你可以这样做 var n Number MAX VALUE
  • 处理 proguard 与 spring 时遇到困难

    我有一个使用 spring 注释扩展的 Web 应用程序 并且我的 proguard 配置如下所示 printmapping out map dontoptimize keepdirectories renamesourcefileattr
  • 使用 iOS 版 Google 地图 SDK 后应用程序大小增加

    我尝试使用适用于 iOS 的 Google Maps SDK 它似乎给我们的应用程序增加了相当大的大小 96MB 而目前应用程序的大小仅为 26MB 使用 Apple 地图 我将不胜感激任何有关如何解决的反馈 经验 没有办法解决这个问题 这
  • 在onCreate中从TextLayout获取Bitmap

    我能够转换Layout with a TextView into a Bitmap 只要事件发生after onCreate 但当我尝试时during在创建时 它不起作用 有办法让它发挥作用吗 我尝试过使用inflate 以各种方式 没有喜
  • WSO2 API Manager 身份验证错误内容类型

    我配置了 WSO2 API Manager 一切似乎都工作正常 唯一困扰我的问题是 如果出现 Auth 异常 API 管理器总是返回 XML 内容类型的响应 例如
  • IntelliJ 调试器卡住

    我正在调试一个普通的 Java 应用程序 没有 GUI 只有大量计算和主线程堆栈中的约 5 个调用 当问题发生时 基本上它一直在局部变量监视中显示 正在收集数据 So instead of going step by step I ve t
  • 在当前进程中通过python运行bat文件

    我正在尝试通过 python 脚本构建一个大型系统 我首先需要设置 Visual Studio 的环境 遇到问题后 我决定看看是否可以设置并启动 Visual Studio 我首先设置几个环境变量 然后调用C Program Files x
  • 如何在通知上显示计时器?

    如何在通知上显示我的计时器 我有一个应用程序启动用户指定的计时器 我想在通知上显示计时器 即使我的应用程序已关闭 我也使用服务来运行计时器 并且我使用 SharedPreference 来传递用户设置给服务的持续时间 这是我的代码 第2页