【问题标题】:How Can I count the number of screen unlocks by a user in Android?如何计算 Android 中用户的屏幕解锁次数?
【发布时间】:2017-04-10 07:11:17
【问题描述】:

我目前正在开发一个 Android 应用程序,该应用程序会通知他/她在一天内完成的屏幕解锁次数。这个例子可以在名为 Digital Wellbeing 的 API 级别 P 或更高级别的库存 android 设备上看到。我想知道它是如何工作的。

【问题讨论】:

标签: java android kotlin android-service


【解决方案1】:

您可以在 Activity 中添加这样的接收者:

private LockScreenStateReceiver mLockScreenStateReceiver;
int count = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mLockScreenStateReceiver = new LockScreenStateReceiver();
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
    filter.addAction(Intent.ACTION_USER_PRESENT);

    registerReceiver(mLockScreenStateReceiver, filter);
}

public class LockScreenStateReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            // screen is turn off
            //("Screen locked");
        } else {
            //Handle resuming events if user is present/screen is unlocked
            count++;
            textView.setText(""+count);
            //("Screen unlocked");
        }
    }
}

@Override
public void onDestroy() {
    unregisterReceiver(mLockScreenStateReceiver);
    super.onDestroy();
}

【讨论】:

  • 将计数存储在 SharedPreferences 而不是类中的变量中。
  • 或者可能不是在我更喜欢使用服务的活动中接收广播,这会更好。并返回 START_STICKY 将确保服务在被操作系统杀死时重新启动。
【解决方案2】:

您可以使用事件统计来获取解锁次数。试试下面的代码 sn -p

  void getdailyUsageStatistics(long start_time, long end_time){
    int unlockcount=0;
    
    UsageEvents.Event currentEvent;
    
    UsageStatsManager mUsageStatsManager = (UsageStatsManager)
            getApplicationContext().getSystemService(Context.USAGE_STATS_SERVICE);

    if (mUsageStatsManager != null) {
 
        UsageEvents usageEvents = mUsageStatsManager.queryEvents(start_time, end_time);


        while (usageEvents.hasNextEvent()) {
            currentEvent = new UsageEvents.Event();
            usageEvents.getNextEvent(currentEvent);


            if (currentEvent.getEventType() == UsageEvents.Event.KEYGUARD_HIDDEN)
            {
              ++unlockcount;
            }
        }

    } else {
        Toast.makeText(getApplicationContext(), "Sorry...", Toast.LENGTH_SHORT).show();
    }
    Log.e("UNLOCK COUNT",unlockcount+" ");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多