想要实现的功能: 快捷方式图标的位置不同,动画不同,比如快捷方式在左边,动画则是从左到右
1.如何创建快捷方式?
有两种方式:
第一种:需用户手动添加小部件到桌面
1)在AndroidManifest中声明 action = android.intent.action.CREATE_SHORTCUT"的Activity:
2) 在此activity 中设置点击快捷图标需启动的activity(因为从launcher中启动,所以包名类名要写全,类名前要加包名),快捷方式的图标和名称
第二种 :用广播主动添加快捷方式
1)给系统launcher发广播 (需权限 :com.android.launcher.permission.INSTALL_SHORTCUT ),系统接收到广播后添加快捷方式
2)在发广播的activity中设置需启动的activity, 快捷方式图标和名称
2。那如何获取快捷方式图标在桌面的位置呢?
最初,实现点击快捷方式进入主页,log中发现 ActivityManager 打开activity时带有参数:bnds=[216,385][376,585]
从launch源码中可以看到,只有快捷方式点击log中会展示图标的位置,
在点击快捷方式时,laucher会把快捷方式图标的矩形位置通过Intent发送给要启动的activity 使用intent.setSourceBounds
所以我们用intent.getSourceBounds 即可获取到坐标,在坐标的基础上做动画就好了
因为点击快捷方式背景透明,透过透明是桌面,所以加载acitivity方式应该用singleInstance
在最后一个操作是展示快捷方式的时候,如果此时调起手机中正在运行的程序界面,会看到最后一个界面是透明界面,然后点击这个透明界面,会像点击了widget一样有动画出现,这时候要怎么规避不让activity放到最后使用的APP页面呢?
1.使这个activity没有历史,即在Androidmenifest配置中 activity nohistory="true" 发现没用,其实换个思维想,此时快捷方式打开的acitivyt是最后一个 不管是不是透明,他并没有打开另外的activity,所以不算历史
2。有没有可以直接从最近使用中删除的属性
android:excludeFromRecents="true"