创建快捷方式,让被HOME键退出的APP恢复原状

本文详细介绍了如何在Android应用中创建和管理快捷方式,包括添加属性以确保应用始终保留任务状态,并提供了一个完整的代码示例来实现创建、删除及检查快捷方式的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Android Maniftest.xml 中,每个Activity添加如下属性:

android:alwaysRetainTaskState="true"

2. 创建快捷方式

private static final String SHORTCUT_UNINSTALL = "com.android.launcher.action.UNINSTALL_SHORTCUT";


public static void creatShortCut(Activity activity) 
{ 
   
deleteCallShortcut(activity);
   
   int resourceId = R.drawable.ic_launcher;
Intent intent = new Intent(); 
intent.setClass(activity, SplashActivity.class);
/*以下两句是为了在卸载应用的时候同时删除桌面快捷方式*/ 
intent.setAction("android.intent.action.MAIN"); 
intent.addCategory("android.intent.category.LAUNCHER"); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

Intent shortcutintent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); 
//不允许重复创建 
shortcutintent.putExtra("duplicate", false); 
//需要现实的名称 
shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_NAME, activity.getResources().getString(R.string.app_name)); 
//快捷图片 
Parcelable icon = Intent.ShortcutIconResource.fromContext(activity.getApplicationContext(), resourceId); 
shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); 
//点击快捷图片,运行的程序主入口 
shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent); 
//发送广播。OK 
activity.sendBroadcast(shortcutintent); 
} 

//删除快捷方式
private static void deleteCallShortcut(Activity activity) {
    Intent shortcut = new Intent(SHORTCUT_UNINSTALL);  
    //名字要和创建时的一样  
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, activity.getResources().getString(R.string.app_name));  
      
    //这里的intent要和创建时的intent设置一致  
    Intent intent = new Intent(); 
   intent.setClass(activity, SplashActivity.class);//SplashActivity.class);
   /*以下两句是为了在卸载应用的时候同时删除桌面快捷方式*/ 
   intent.setAction("android.intent.action.MAIN"); 
   intent.addCategory("android.intent.category.LAUNCHER");             
      
    //发送广播以删除shortcut  
   activity.sendBroadcast(shortcut);  
      
}  



   intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);  //这一句很关键 是从系统创建的快捷方式中列出它的值找到的。



public static boolean hasShortcut(Context cx) {
       boolean result = false;
       // 获取当前应用名称
       String title = null;
       try {
           final PackageManager pm = cx.getPackageManager();
           title = pm.getApplicationLabel(
                   pm.getApplicationInfo(cx.getPackageName(),
                           PackageManager.GET_META_DATA)).toString();
       } catch (Exception e) {
       }

       final String uriStr;
       if (android.os.Build.VERSION.SDK_INT < 8) {
           uriStr = "content://com.android.launcher.settings/favorites?notify=true";
       } else {
           uriStr = "content://com.android.launcher2.settings/favorites?notify=true";
       }
       final Uri CONTENT_URI = Uri.parse(uriStr);
//     final Cursor c = cx.getContentResolver().query(CONTENT_URI, null,
//             "title=?", new String[] { title }, null);
//     if (c != null && c.getCount() > 0) {
//         result = true;
//     }
       
       final Cursor c = cx.getContentResolver().query(CONTENT_URI, null,
               "", new String[]{}, null);
       if (c != null && c.getCount() > 0) {
          for(int i=0; i<c.getCount(); i++){
             c.moveToPosition(i);
             for(int j=0; j<c.getColumnCount();j++){
                try{
                   if(j == 15){
//                    byte[] blob = c.getBlob(j);
//                    if(blob != null)
//                       for(int x = 0; x<blob.length; x++){
//                          Log.e("","blog["+x+"]:"+blob[x]);
//                       }
                   }
                   else
                      COM.LOGE("", "i:" + i + "j:" + j + " name:" + c.getColumnName(j) + " value:" + c.getString(j));
                }
                catch(RuntimeException e){
                   e.printStackTrace();
                }
             }
             c.moveToNext();
          }
           result = true;
       }
       
       return result;
   }

1. 用户与身体信息管理模块 用户信息管理: 注册登录:支持手机号 / 邮箱注册,密码加密存储,提供第三方快捷登录(模拟) 个人资料:记录基本信息(姓名、年龄、性别、身高、体重、职业) 健康目标:用户设置目标(如 “减重 5kg”“增肌”“维持健康”)及期望周期 身体状态跟踪: 体重记录:定期录入体重数据,生成体重变化曲线(折线图) 身体指标:记录 BMI(自动计算)、体脂率(可选)、基础代谢率(根据身高体重估算) 健康状况:用户可填写特殊情况(如糖尿病、过敏食物、素食偏好),系统据此调整推荐 2. 膳食记录与食物数据库模块 食物数据库: 基础信息:包含常见食物(如米饭、鸡蛋、牛肉)的名称、类别(主食 / 肉类 / 蔬菜等)、每份重量 营养成分:记录每 100g 食物的热量(kcal)、蛋白质、脂肪、碳水化合物、维生素、矿物质含量 数据库维护:管理员可添加新食物、更新营养数据,支持按名称 / 类别检索 膳食记录功能: 快速记录:用户选择食物、输入食用量(克 / 份),系统自动计算摄入的营养成分 餐次分类:按早餐 / 午餐 / 晚餐 / 加餐分类记录,支持上传餐食照片(可选) 批量操作:提供常见套餐模板(如 “三明治 + 牛奶”),一添加到记录 历史记录:按日期查看过往膳食记录,支持编辑 / 删除错误记录 3. 营养分析模块 每日营养摄入分析: 核心指标计算:统计当日摄入的总热量、蛋白质 / 脂肪 / 碳水化合物占比(按每日推荐量对比) 微量营养素分析:检查维生素(如维生素 C、钙、铁)的摄入是否达标 平衡评估:生成 “营养平衡度” 评分(0-100 分),指出摄入过剩或不足的营养素 趋势分析: 周 / 月营养趋势:用折线图展示近 7 天 / 30 天的热量、三大营养素摄入变化 对比分析:将实际摄入与推荐量对比(如 “蛋白质摄入仅达到推荐量的 70%”) 目标达成率:针对健
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值