Android7.1新特性shortcut文檔以外的東西

app shortcut官方文檔 shortcut是android7.1推出的新特性,仿ios的3d touch功能,在android平臺上表現爲長按彈出快捷方式,7.1系統上谷歌自家app均支持了該功能,例如系統app YouTube等。html

簡介

app shortcut分爲static shortcut和Dynamic short,能夠類比android廣播分動態註冊靜態註冊來理解,具體看文檔便可理解,因項目使用的功能靜態註冊方式可實現,這裏只談談靜態註冊android

文檔中沒提的坑

  • 模擬器上會出現莫名其妙的問題,建議這功能直接真機測試ios

  • 文檔intent中有個targetPackage配置項,初一看覺得是packname,實際是applicationID配置。插個知識點在eclipse項目結構時packname和applicationID是同一律念或者說兩者值一致,但android studio項目結構時,兩者是不一樣的applicationID應用程序的惟一標識而packname僅僅指項目的包名並無惟一性。 所以debug release包該參數須要動態配置 1.在build.gradle文件中定義一個常量,分debug和release賦不一樣值,再shortcuts.xml中調用,結果 行不通 2.google到的方案https://github.com/Zellius/android-shortcut-gradle-plugin/blob/master/README.md 大概用了一個第三方庫,不在shortcuts.xml中對targetPackage直接賦值,在代碼中實現 測試可行 3.用隱試intent方案,繞過targetpackage配置, 結果行不通 4.固然講debug release包分開編譯調用不一樣代碼方式確定是能解決這個問題的。但有點拿大炮打蚊子感受 故放棄該方案git

  • 還有個小case,快捷方式指向購物車頁面,若是在該頁面back,按照文檔上寫是直接推出app,其實能夠實現從back到指定頁面,相似咱們app中back回的首頁,這是比較合乎常理的,實現只需在對應intent上加上back會頁面的intent。github

<shortcuts xmlns:android="http://schemas.android.com/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="com.example.myapplication"
      android:targetClass="com.example.myapplication.mainactivity" />
    <intent
      android:action="android.intent.action.VIEW"
      android:targetPackage="com.example.myapplication"
      android:targetClass="com.example.myapplication.ComposeActivity" />
    <categories android:name="android.shortcut.conversation" />
  </shortcut>
  <!-- Specify more shortcuts here. -->
</shortcuts>
    

複製代碼

小結

固然把app shortcut使用的更加人性化,還有不少小細節能夠處理的更加完美,例如app運行時跟非運行時back頁面的區別處理。 快捷方式的更新處理,等等。。總之,基礎的功能實現容易,作得更好仍是須要下翻功夫的bash

2017年3月23更新

關於targetPackage自動配置提供一個新方案,直接gradle寫個腳本替換shortcuts.xml文件中targetPackage的值app

def replaceInShortcuts(variant, fromString, toString) {
    def flavor = variant.productFlavors.get(0)
    def buildType = variant.buildType
    def shortcutsFile = "$buildDir/intermediates/res/merged/${flavor.name}/${buildType.name}/xml/shortcuts.xml"
    def file = new File(shortcutsFile);
    def updatedContent = file.getText('UTF-8').replaceAll(fromString, toString)
    file.write(updatedContent, 'UTF-8')
}  


 output.processResources.doFirst {
   replaceInShortcuts(variant, '\\{PCK\\}', variant.applicationId)
 }

複製代碼

注:本文做者在私人帳號發表過,這次是在公司帳號發佈。eclipse

相關文章
相關標籤/搜索