Android小应用

您所在的位置:网站首页 手机屏幕显示时间的同时有花朵 Android小应用

Android小应用

2024-07-16 05:35| 来源: 网络整理| 查看: 265

idea来源

这个idea是蔡小亦童鞋提出来的。她说看到一条报道说有人看手机看太久眼睛怎么怎么了,所以想弄个应用来监控屏幕使用时间。答应帮她做已经答应很久了,刚好这周没什么事了,于是就开始做。从开始找资料到写代码到美工到调试完成,只花了1天时间,不错不错~因为我觉得这个做得很粗糙别人不可能会怎么用,所以我就针对蔡小亦童鞋定制了流氓兔形象,哦哈哈是不是该感谢我~

 

预期目标

1、能记录屏幕使用时间

2、每天凌晨清空数据,重新记录

3、用户可以自定义警戒线,当使用时间超过警戒线则在通知栏提醒。

 

主要代码

复制代码 1 package com.legend; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5 6 import android.app.Activity; 7 import android.content.Context; 8 import android.content.Intent; 9 import android.content.SharedPreferences; 10 import android.os.Bundle; 11 import android.view.View; 12 import android.view.View.OnClickListener; 13 import android.widget.Button; 14 import android.widget.EditText; 15 import android.widget.TextView; 16 import android.widget.Toast; 17 18 /** 19 * 目前先实现最小功能,只提取出总的屏幕亮的时间 20 * 通过广播来接收屏幕是否启动这个事件 21 * @author 林培东 22 */ 23 public class MainActivity extends Activity 24 { 25 public TextView summary=null; 26 public TextView preset=null; 27 public EditText set=null; 28 public Button submit=null; 29 30 @Override 31 public void onCreate(Bundle savedInstanceState) 32 { 33 super.onCreate(savedInstanceState); 34 setContentView(R.layout.main); 35 startService(new Intent("com.legend.SERVICE_DEMO"));//启动服务 36 37 summary=(TextView)findViewById(R.id.summary); 38 preset=(TextView)findViewById(R.id.preset); 39 set=(EditText)findViewById(R.id.set); 40 submit=(Button)findViewById(R.id.submit); 41 42 //显示已使用屏幕时间 43 SharedPreferences sp=getSharedPreferences("actm", Context.MODE_PRIVATE); 44 int sum=(int)sp.getLong("sum", 0L)/1000; 45 int hour=sum/3600; 46 int minute=(sum-hour*3600)/60; 47 int second=sum%60; 48 //格式化输出日期 49 Date tmp=new Date(); 50 tmp.setHours(hour); 51 tmp.setMinutes(minute); 52 tmp.setSeconds(second); 53 SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss"); 54 String result=sdf.format(tmp); 55 summary.setText(result);//最终显示 56 57 //显示已保存的设置 58 int limit=sp.getInt("limit", 24*60); 59 preset.setText(" 当前设定的预警分钟数为"+Integer.toString(limit)); 60 61 //点击确定后重新设置 62 submit.setOnClickListener(new OnClickListener() 63 { 64 @Override 65 public void onClick(View v) 66 { 67 String tmp=set.getText().toString(); 68 if(tmp.equals("")) 69 Toast.makeText(MainActivity.this, "输入不能为空!", Toast.LENGTH_SHORT).show(); 70 else 71 { 72 SharedPreferences sp=getSharedPreferences("actm", Context.MODE_PRIVATE); 73 SharedPreferences.Editor editor=sp.edit(); 74 editor.putInt("limit", Integer.parseInt(tmp)); 75 editor.commit(); 76 Toast.makeText(MainActivity.this, "已设定!", Toast.LENGTH_SHORT).show(); 77 preset.setText(" 当前设定的预警分钟数为"+Integer.parseInt(tmp)); 78 } 79 } 80 }); 81 82 } 83 84 } 复制代码 复制代码 1 package com.legend; 2 3 import java.util.Date; 4 import java.util.Timer; 5 import java.util.TimerTask; 6 7 import android.app.Notification; 8 import android.app.NotificationManager; 9 import android.app.PendingIntent; 10 import android.app.Service; 11 import android.content.BroadcastReceiver; 12 import android.content.Context; 13 import android.content.Intent; 14 import android.content.IntentFilter; 15 import android.content.SharedPreferences; 16 import android.os.IBinder; 17 18 /** 19 * 创建一个服务,该服务主要用来接收广播和创建定时器 20 * @author 林培东 21 */ 22 public class LocalService extends Service 23 { 24 private static final int NOTIFY_ID=1234;//通知的唯一标识符 25 26 //主要功能,广播接收器 27 private final BroadcastReceiver receiver=new BroadcastReceiver() 28 { 29 @Override 30 public void onReceive(Context context, Intent intent) 31 { 32 SharedPreferences sp=getSharedPreferences("actm", Context.MODE_PRIVATE); 33 SharedPreferences.Editor editor=sp.edit(); 34 35 if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)) 36 { 37 //保存屏幕启动时的毫秒数 38 editor.putLong("lasttime", new Date().getTime()); 39 editor.commit(); 40 41 //根据需要看是否需要在通知栏提醒 42 int sum=(int)sp.getLong("sum", 0L)/1000; 43 int limit=sp.getInt("limit", 1440)*60; 44 if(limit 2 7 8 15 16 23 24 29 30 36 37 42 43 复制代码 复制代码 1 2 6 7 8 9 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 复制代码

 

项目分析

我遇到的第一个问题是:如何监控?

经过查资料,我发现当屏幕启用或者锁屏时,系统会分别发送ACTION_SCREEN_ON和ACTION_SCREEN_OFF这两个广播。我们只需要在接收这两个广播时记录时间就可以了。

注意:为了时程序退出后也能运行,必须使用Service。

注意:这两个广播是受保护的,只能在代码中注册。

下面是在Service中注册:

//添加过滤器并注册 final IntentFilter filter=new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); registerReceiver(receiver, filter);

在接收器receiver里,定义了onReceive()来处理这些数据,主要功能都在里面实现:

复制代码 //主要功能,广播接收器 private final BroadcastReceiver receiver=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { SharedPreferences sp=getSharedPreferences("actm", Context.MODE_PRIVATE); SharedPreferences.Editor editor=sp.edit(); if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { //保存屏幕启动时的毫秒数 editor.putLong("lasttime", new Date().getTime()); editor.commit(); //根据需要看是否需要在通知栏提醒 int sum=(int)sp.getLong("sum", 0L)/1000; int limit=sp.getInt("limit", 1440)*60; if(limit


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3