要获取每小时的使用统计数据,可以使用Android的UsageStatsManager类。以下是一个简单的代码示例:
首先,在AndroidManifest.xml文件中添加以下权限:
然后,在Activity或Service中使用以下代码获取每小时的使用统计数据:
import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.widget.TextView;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private TextView usageStatsTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
usageStatsTextView = findViewById(R.id.usageStatsTextView);
// 检查权限
if (hasUsageStatsPermission()) {
showUsageStats();
} else {
requestUsageStatsPermission();
}
}
@Override
protected void onResume() {
super.onResume();
if (hasUsageStatsPermission()) {
showUsageStats();
}
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
private boolean hasUsageStatsPermission() {
try {
// 检查是否有权限
AppOpsManager appOps = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, android.os.Process.myUid(), getPackageName());
return mode == AppOpsManager.MODE_ALLOWED;
} catch (Exception e) {
return false;
}
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
private void requestUsageStatsPermission() {
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
private void showUsageStats() {
UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
// 获取当前时间的Calendar对象
Calendar calendar = Calendar.getInstance();
long endTime = calendar.getTimeInMillis();
calendar.add(Calendar.HOUR_OF_DAY, -1); // 获取一小时前的时间
long startTime = calendar.getTimeInMillis();
// 获取每小时的使用统计数据
List usageStatsList = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_HOUR, startTime, endTime);
// 格式化并显示统计数据
StringBuilder statsBuilder = new StringBuilder();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
for (UsageStats usageStats : usageStatsList) {
String packageName = usageStats.getPackageName();
long totalUsageTime = usageStats.getTotalTimeInForeground();
String lastTimeUsed = dateFormat.format(usageStats.getLastTimeUsed());
statsBuilder.append("Package Name: ").append(packageName)
.append("\nTotal Usage Time: ").append(totalUsageTime / 1000).append(" seconds")
.append("\nLast Time Used: ").append(lastTimeUsed)
.append("\n\n");
}
usageStatsTextView.setText(statsBuilder.toString());
}
}
注意:上述代码仅适用于Android 5.1(API级别22)及更高版本。在低于API级别22的设备上,hasUsageStatsPermission()和requestUsageStatsPermission()方法将返回false。