📜  如何实现Android Slice?

📅  最后修改于: 2022-05-13 01:55:22.184000             🧑  作者: Mango

如何实现Android Slice?

Google 在 Android Pie 中引入了一个名为Slices的新 API。切片是 Android Jetpack 支持库的一个组件。 Slices 是一个较小的 UI 模板,用于在 Google 搜索应用中展示您的应用内容。它使用户能够在您的应用程序之外更快地完成任务。在本文中,我们将介绍如何在您的应用中使用 Slices。 Slices 支持各种 LiveData、Deeplink、Scrollable 布局等。让我们开始这篇文章。

从你的第一个 Slice 开始

在应用程序的构建中包含依赖项:

dependencies {
    implementation "androidx.slice:slice-builders-ktx:(latest version)"
}

我们现在必须构建一个扩展 SliceProvider 的文件。这类似于为应用程序提供一个切片。切片是应用程序信息和活动的一部分,可以在 Android 系统界面中的应用程序外部或其他应用程序内显示。 Uri 标识切片,而 SliceProvider 使您的应用程序能够基于 uri 提供切片。要添加新的提供者,请转到NEW -> OTHERS -> SLICEPROVIDER ,它将在生成时添加到 Manifest。


    ...
    
        ...
        
            
                
                
            
        
        ...
    

每个 Slice 都分配了一个 URI。因此,当应用程序想要显示切片时,它会向应用程序发送带有关联 URI 的绑定请求。然后程序使用 onBindSlice 构造 Slice。 sliceAttached 方法似乎是,

Kotlin
override fun sliceAttached(sliceUri: Uri): Slice? {
    val gfgAction = doSomething()
    return if (sliceUri.path == "/gfg") {
        list(context, sliceUri, ListBuilder.INFINITY) {
            row {
                primaryAction = activityAction
                title = "Hello Geeks for Geeks."
            }
        }
    } else {
        list(context, sliceUri, ListBuilder.INFINITY) {
            row {
                primaryAction = activityAction
                title = "Not a valid URI"
            }
        }
    }
}


Kotlin
private fun postSomething(sliceUri: Uri): Slice {
  return ListBuilder(context, postUri, ListBuilder.INFINITY)
       
      .setHeader {
        it.apply {
           
          articleTitle = "GeeksforGeeks"
           
          titleOfTheArticle = "geeksforgeeks.org"
          summaryOfTheArticle = "A great Android article"
           
          primaryAction = postArticle()
        }
      }
      .build()
}


Kotlin
override fun postOnGeeksforGeeks(): Boolean {
 return true
}
override fun onPostShared(sometShot: Uri): Slice? {
 val path = sometShot.path
 when (path) {
  
   "/$ARTICLE_PATH" -> return createAPost(sometShot)
 }
 return null
}


通过单击此页面顶部或底部的下载材料按钮开始下载教程材料。启动 Android Studio 并添加基本项目。大多数情况下,您将设计自己的类。要添加代码,您需要找到 AndroidManifest.xml,因此请确保您可以找到它。如果您尚未下载适用于 Android API 级别 28 的 SDK,则需要这样做才能启动应用程序。如果您已经安装了 Android API 28,您可以跳过接下来的四个阶段,直接继续开发和启动应用程序。

切片查看器

要显示其材料,切片需要查看器或演示者。 Google 搜索应用是显示 Slice 模板的合适演示者之一。当用户在搜索字段中输入一个词时,您开发的 Slice 可能会显示与用户的搜索词组相关的信息。

例如,如果用户输入诸如“ride”或“ride vehicle”之类的术语,Careem 或 Uber 等已安装应用程序中的 Slices 可能会出现,从而允许用户无需打开相关应用程序即可订购汽车;可以使用应用操作和切片提供整个体验。

使用切片查看器显示您的切片

请注意,演示者可能会对您的 Slices 进行细微更改以满足他们的设计需求,例如字体样式、字体大小和/或颜色。例如,Slice 中的图标将使用演示者应用程序的强调色着色。

要从您的文章应用程序中显示切片,您需要一个切片查看器应用程序。 Slice Viewer 应用程序利用您的切片 Uri 在所谓的表面上查看它,并且在您的 Slice 的第一个请求时,将提示用户允许查看器访问。

使用 SliceProvider 类

SliceProvider 类是向其他应用程序公开您的 Slice 的唯一方法,它确定向查看器显示哪个 Slice。 SliceProvider 类扩展了 ContentProvider 类。 Android 应用程序的基本构建元素之一是内容提供程序。它们封装数据并通过 ContentResolver 接口将其交付给应用程序。如果您需要在应用程序之间传输数据,您可以使用内容提供程序。例如,联系人数据被众多应用程序使用,并保存在内容提供商中。单击此处了解有关内容供应商的更多信息。

在这种情况下,我们:

  1. 在启动时,使用 onCreateSliceProvider() 来初始化您的 Slice 提供程序。
  2. 如果您将长时间运行的进程放在这里,您的应用程序的启动将被延迟,与查看器绑定的第一个 Slice 也将延迟。
  3. 如果提供者成功加载,则返回 true;否则,返回false。
  4. 在 onBindSlice () 的主体内制作您的 Slice。
  5. 您应该尝试尽快生产并返回您的 Slice。
  6. 为了让您的 Slice UI 保持响应,请在后台进行网络查询或 I/O 活动。当您的后台活动完成后,联系 contentResolver 以使用新数据更新您的 Slice。
  7. 使用notifyChange(uri) 中的Slice URI,Android 将为您调用onBindSlice()。
  8. 路由可以从 URI 中获得。
  9. 如果该路径与 Slice 的路径匹配,则返回文章 Slice。

科特林

private fun postSomething(sliceUri: Uri): Slice {
  return ListBuilder(context, postUri, ListBuilder.INFINITY)
       
      .setHeader {
        it.apply {
           
          articleTitle = "GeeksforGeeks"
           
          titleOfTheArticle = "geeksforgeeks.org"
          summaryOfTheArticle = "A great Android article"
           
          primaryAction = postArticle()
        }
      }
      .build()
}

在撰写本文时,Android 有五个不同的 Slice 构建器,用于创建具有不同样式和功能的各种行:HeaderBuilder、RowBuilder、GridRowBuilder、RangeBuilder 和 InputRangeBuilder。

  1. 您将使用以下工具来构建您的“文章切片”设计:
  2. ListBuilder将成为 Slice 的主要构建器。
  3. HeaderBuilder用于创建带有标题和副标题的标题。
  4. GridRowBuilder用于创建一行单元格。
  5. 要添加单元格,请使用 CellBuilder;每个单元格包含一个图像、标题和文本

科特林

override fun postOnGeeksforGeeks(): Boolean {
 return true
}
override fun onPostShared(sometShot: Uri): Slice? {
 val path = sometShot.path
 when (path) {
  
   "/$ARTICLE_PATH" -> return createAPost(sometShot)
 }
 return null
}

启动切片查看器

  • 从菜单中选择运行 -> 编辑配置。
  • 点击左上角的+,然后选择Android App。
  • 在名称字段中输入 Slice,在模块中输入 app。
  • 在启动下,提供一个 URL,例如 slice-content:/com.app's-package name/gfg。

图片#1。切片赛跑者

结论

也可以插入切片,类似于点击等交互,以显示吐司、记录或移动到新活动。现在,通过选择切片模块从右上角启动应用程序,您将看到应用程序的模块。