安卓Android7.1.1shortcut实现桌面图标快捷方式跳转,类似IOS3dtouch
安卓Android7.1.1shortcut实现桌⾯图标快捷⽅式跳转,类似
IOS3dtouch
⼀、背景介绍:
3D Touch是⼀种⽴体触控技术,被苹果称为新⼀代多点触控技术,是在Apple Watch上采⽤的Force Touch,屏幕可感应不同的感压⼒度触控。3D Touch,苹果iPhone 6s的新功能,看起来类似 PC 上的右键。有Peek Pop 两种新⼿势。
随着IOS在iphone 6s 上加⼊了3d touch后,果粉⼿机很多应⽤都有了快捷访问的功能。
⽐如下图:
3D touch是需要硬件⽀持的,但是⾕歌开放了系统,没有牢牢把控住硬件。就算⾕歌实现了3Dtouch,其他安卓⼚商估计也没这么快更新硬件。
但是我们也没有必要暗⾃菲薄不是,开放有开放的好处,封闭有封闭的缺点。
⼆、安卓实现:
好了,废话不多说。这篇⽂章的主题是介绍怎么在安卓上实现类似IOS 3d touch的功能。在安卓系统上,这个功能被称为应⽤程序快捷⽅式(shortcut),显⽰的⼊⼝是长按应⽤图标,也可以拖动快捷⽅式到桌⾯形成⼀个独⽴的⼊⼝。
⾸先,看看⾕歌关于shortcut的介绍:
如果有梯⼦点这:
应⽤程序快捷⽅式
如果您的应⽤定位到Android 7.1(API级别25)或更⾼级别,则可以定义 应⽤中特定操作的快捷⽅式。这些快捷⽅式可以显⽰在⽀持的启动器中。快捷⽅式可让您的⽤户快速启动应⽤内的常见或推荐任务。
每个快捷⽅式都引⽤⼀个或多个 意图,当⽤户选择快捷⽅式时,每个意图都会在应⽤中启动特定操作。您可以表⽰为快捷⽅式的操作⽰例包括:
将⽤户导航到地图应⽤中的特定位置
在通信应⽤中向朋友发送消息
在媒体应⽤中播放电视节⽬的下⼀集
游戏在应⽤中加载求最后⼀个保存点
您可以为您的应⽤发布以下类型的快捷⽅式:
静态快捷⽅式在打包到APK或应⽤程序包中的资源⽂件中定义
只有在运⾏时,您的应⽤才能发布,更新和删除动态快捷⽅式
如果⽤户授予权限,则固定快捷⽅式可以在运⾏时固定到受⽀持的启动器。
注意:⽤户还可以通过将应⽤程序的静态和动态快捷⽅式复制到启动器上来创建固定快捷⽅式
您可以⼀次为应⽤程序发布最多五个快捷⽅式(静态快捷⽅式和动态快捷⽅式组合)。但是,某些启动器应⽤程序不会显⽰您为应⽤创建的所有静态和动态快捷⽅式。
不死族⽤户可以创建的应⽤固定快捷⽅式的数量没有限制。即使您的应⽤⽆法移除固定的快捷⽅式,它仍然可以禁⽤它们。
注意:虽然其他应⽤⽆法访问快捷⽅式中的元数据,但启动器本⾝可以访问此数据。因此,这些元数据应隐藏敏感的⽤户信息。
通过介绍我们知道:
1. 有动态和静态两种注册快捷⽅式;
2. 需要注意的是要保护⽤户的敏感信息,⽐如订单之类的信息;
3. 可以动态发布,更新和删除;
4. 可以固定它们到桌⾯,作为⼀种快捷⽅式的⼊⼝。
静态注册:
1. ⾸先在res下⾯新建⽬录xml,再新建l⽂件, 路径:res/l
<shortcuts xmlns:android="schemas.android/apk/res/android">
<shortcut
android:shortcutId="compose"
android:enabled="true"
android:icon="@drawable/compose_icon"
android:shortcutShortLabel="@string/compose_shortcut_short_label1"
android:shortcutLongLabel="@string/compose_shortcut_long_label1"
android:shortcutDisabledMessage="@string/compose_disabled_message1">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="application"
android:targetClass="application.ComposeActivity" />
<!-- If your shortcut is associated with multiple intents, include them
here. The last intent in the list determines what the user sees when
they launch this shortcut. -->
<categories android:name="versation" />
</shortcut>
<!-- Specify more shortcuts here. -->
</shortcuts>
2. 修改l
<manifest xmlns:android="schemas.android/apk/res/android"
package="com.william.shortcut">
<application ... >
<activity android:name="Main">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
minecraft联机<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
</application>
</manifest>
注意:如果将多个意图与快捷⽅式关联,系统将启动与快捷⽅式在资源⽂件中的最后意图相对应的活动,以及后向堆栈中的其他活动 。在这种情况下,当⽤户选择快捷⽅式然后按后退键时,您的应⽤程序将启动与资源⽂件中列出的快捷⽅式倒数第⼆个意图相对应的活动。重复按下后退按钮后,此⾏为模式继续,直到⽤户清除快捷⽅式创建的后堆栈。当⽤户下⼀次按下后退按钮时,系统会将它们导航回启动器。
动态注册:
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "id1")
.setShortLabel("Web site")
.setLongLabel("Open the web site")
.ateWithResource(context, R.drawable.icon_website))
.setIntent(new Intent(Intent.ACTION_VIEW,
Uri.parse("ample/")))
.build();
shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut));
踪快捷⽅式⽤法:
要确定应出现静态和动态快捷⽅式的情况,启动器会检查快捷⽅式的激活历史记录。当发⽣以下任⼀事件时 reportShortcutUsed() ,您可以通过调⽤⽅法,传⼊快捷⽅式的ID来跟踪⽤户何时在应⽤内完成特定操作:
⽤户选择具有给定ID的快捷⽅式。
⽤户打开应⽤程序并⼿动完成与同⼀快捷⽅式对应的操作。
禁⽤快捷⽅式:
由于您的应⽤及其⽤户可以将快捷⽅式固定到设备的启动器上,因此这些固定快捷⽅式可能会引导⽤户执⾏应⽤中已过期或不再存在的操作。要管理这种情况,您可以禁⽤不希望⽤户通过调⽤选择的dis
ableShortcuts()快捷⽅式,这将从静态和动态快捷⽅式列表中删除指定的快捷⽅式,并禁⽤这些快捷⽅式的任何固定副本。您还可以使⽤此⽅法的 重载版本来定义在⽤户尝试启动已禁⽤的快捷⽅式时应显⽰的错误消息。
世界景点分配多个意图:
使⽤时创建快捷⽅式 ShortcutInfo.Builder,您可以使⽤ setIntents() ⽽不是 setIntent()。通过调⽤setIntents(),您可以在⽤户选择快捷⽅式时在应⽤程序中启动多个活动,将列表中的最后⼀个活动放在 后台堆栈中。如果⽤户随后决定按设备的后退按钮,他们将在您的应⽤中看到另⼀个活动,⽽不是返回设备的启动器。
最佳实践:网页保存密码
在设计和创建应⽤程序的快捷⽅式时,您应遵循以下准则:
(快捷⽅式图标的设计规范)
喊空间麦词
没有梯⼦的点这⾥:
要使应⽤程序的快捷⽅式与系统应⽤程序使⽤的快捷⽅式在视觉上保持⼀致,请遵循应⽤程序快捷⽅式设计指南。
仅发布四个不同的快捷⽅式:
虽然API⽬前⽀持在任何给定时间为您的应⽤程序组合最多五个静态快捷⽅式和动态快捷⽅式,但建议您随时只发布四个不同的快捷⽅式,以改善启动器中快捷⽅式的可视外观。
限制快捷⽅式描述长度:
菜单中的空间有限,可在启动器中显⽰应⽤程序的快捷⽅式。如果可能,将快捷⽅式的“简短描述”的长度限制为10个字符,并将“长描述”的长度限制为25个字符。
维护快捷⽅式和操作使⽤历史记录:
对于您创建的每个快捷⽅式,请考虑⽤户可以在应⽤程序中直接完成相同任务的不同⽅式。请记住reportShortcutUsed() 在每种情况下调⽤ ,以便启动器维护代表您的快捷⽅式的操作的准确历史记录。
仅在保留其含义时更新快捷⽅式:
更改动态和固定快捷⽅式时,updateShortcuts() 仅在更改保留其含义的快捷⽅式的信息时调⽤ 。否则,您应该使⽤以下⽅法之⼀,具体取决于您要重新创建的快捷⽅式的类型:
动态快捷⽅式: addDynamicShortcuts()或 setDynamicShortcuts()。
固定快捷⽅式: requestPinShortcut()。
例如,如果您创建了⼀个导航到超市的快捷⽅式,那么只要超市名称发⽣变化但其位置保持不变,只需更新快捷⽅式即可。但是,如果⽤户开始在不同的超市位置购物,则最好创建新的快捷⽅式。
备份和还原期间不会保留动态快捷⽅式:
当设备进⾏备份和还原操作时,不会保留动态快捷⽅式。因此,建议您检查getDynamicShortcuts() 每次启动应⽤程序时返回的对象数,并根据需要重新发布动态快捷⽅式,如“ 备份和还原”部分中的代码段所⽰ 。
下⾯我们⽤⾃⼰的代码实现动态注册吧:
⾸先,在真实的业务场景中,我们需要判断要跳转的⽬标页⾯是否需要登录,分别做处理
所以我在Demo中指定的跳转⼊⼝都是闪屏页
⾸先看看l
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
三生三世的歌词android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".SplashActivity"
android:theme="@style/theme_loading">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />            </intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
<activity
android:name=".TargetActivity"
android:screenOrientation="portrait" />
</application>
闪屏页代码:
/**
* 作者:William 时间:2018/7/14
* 类说明:闪屏页
*/
public class SplashActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
String targetAction = getIntent().getStringExtra("targetAction");
new Handler().postDelayed(() -> {
// 真实的业务场景中,这⾥需要判断⽬标页⾯是否需要登录
// 这⾥简单模拟1秒钟后跳转到⽬标页⾯,统⼀在MainActivity做跳转            Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("targetAction", targetAction);
startActivity(intent);
finish();// 避免回退时⼜能重新看到闪屏页
}, 1000);
}
}
MainActivity.java:
public class MainActivity extends AppCompatActivity {
private boolean exit;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。