如何使用SharedPreferences统计应用打开次数实现指定次数后展示桌面小部件
实现步骤
- 第一步:初始化SharedPreferences并统计应用启动次数
选择在应用全局初始化或者主入口Activity的onCreate()方法中完成计数逻辑,使用应用私有模式的SharedPreferences存储数据,避免外部应用读取:// 初始化私有SharedPreferences实例 SharedPreferences sp = getSharedPreferences("app_runtime_data", MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); // 读取历史启动次数,默认值为0 int historyStartCount = sp.getInt("app_start_count", 0); // 本次启动计数+1 int currentCount = historyStartCount + 1; editor.putInt("app_start_count", currentCount); // 异步写入,不阻塞主线程 editor.apply(); - 第二步:增加触发标记位,判断是否满足小部件展示条件
新增一个布尔型标记位记录是否已经触发过小部件展示请求,避免每次启动都重复触发:// 自定义触发小部件展示的启动次数阈值,比如设置为5次 final int WIDGET_TRIGGER_COUNT = 5; // 读取是否已经触发过请求的标记,默认false boolean hasRequestedWidget = sp.getBoolean("has_requested_widget", false); if (!hasRequestedWidget && currentCount >= WIDGET_TRIGGER_COUNT) { // 执行小部件展示逻辑:可选择弹出引导提示,或调用系统API请求添加桌面小部件 requestAddDesktopWidget(); // 更新标记位,避免重复触发 editor.putBoolean("has_requested_widget", true); editor.apply(); } - 第三步:桌面小部件添加逻辑实现(Android原生示例)
Android 8.0及以上系统提供了官方的小部件添加API,可直接调用唤起系统的小部件添加弹窗:private void requestAddDesktopWidget() { AppWidgetManager widgetManager = AppWidgetManager.getInstance(this); // 替换为你自己的AppWidgetProvider类名 ComponentName widgetComponent = new ComponentName(this, MyCustomWidgetProvider.class); // 检查设备是否支持小部件固定请求 if (widgetManager.isRequestPinAppWidgetSupported()) { PendingIntent successCallback = PendingIntent.getBroadcast( this, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE ); widgetManager.requestPinAppWidget(widgetComponent, null, successCallback); } else { // 低版本系统弹出引导文案,提示用户手动到桌面小部件列表添加 Toast.makeText(this, "请到桌面小部件列表添加本应用小部件", Toast.LENGTH_SHORT).show(); } }
注意事项
- 统计启动次数时如果需要排除后台切前台的场景,可通过注册
ActivityLifecycleCallbacks全局统计应用冷启动/从后台恢复的次数,避免重复计数 - 不要省略
has_requested_widget标记位,避免用户拒绝/添加完小部件后,每次启动应用都重复弹出添加提示 - SharedPreferences写入操作优先使用
apply()异步执行,不要用同步的commit()避免阻塞主线程
内容的提问来源于stack exchange,提问作者VHS
相关产品推荐
相关产品推荐

