为您的第一个Android Slice编写代码并保持用户参与度

本文介绍了Android的Slices功能,它能在用户需要时将应用内容呈现在他们面前,提高应用的可见性和用户参与度。通过实际操作,读者将学会如何创建从简单的启动Activity的切片到包含多个组件的复杂切片,涉及到URI定义、切片布局构建、测试和优化等步骤,从而利用Slices保持用户兴趣。
摘要由CSDN通过智能技术生成

艰苦的工作并不仅仅是因为您的应用在Google Play商店中获得了大量下载和正面评价。 典型的移动用户在其设备上安装了数十个应用程序,并且随着新应用程序的不断发布,您将需要努力保持观众的兴趣!

保持用户回到您的应用程序对于建立稳定,忠实的用户群至关重要 。 另外,如果您已经通过应用获利,那么人们在应用中花费的时间会直接影响您的收入-可以将每一秒钟视为展示广告或诱使用户大肆宣传的另一次机会。 -app购买!

Google在今年的I / O大会上推出了slices这一新功能,该功能有望在最需要的确切时间将用户的应用程序功能和内容显示在用户面前,从而带动用户回到您的应用程序。

切片成形是保留您的观众的重要工具,现在正是使用这一崭新的Android功能获得动手经验的最佳时机。 到本文结尾,您将创建一系列切片,从一个可以在点击时启动Activity的简单切片到由图标,图像,网格和多个SliceActions组成的更复杂的切片。

Slices:用户享受您的应用程序的更多方式

与窗口小部件类似,切片是出现在应用程序上下文之外的内容片段,从而增加了应用程序的可见性并为您提供了更多吸引观众的机会。

切片有可能极大地提高您应用的可见性,而Google承诺会在许多Android用户花费大量时间的区域(包括Google搜索和Google助手)中增加对切片的支持。 由于它们是Android Jetpack的一部分,因此分片与Android 4.4及更高版本兼容,这意味着您的分片有可能覆盖所有Android用户的95%。

因此,切片可以提供很多功能-但是它们如何工作?

当前,如果您在Google应用中执行搜索,则Google可能会建议您设备上已安装的相关应用。 例如,如果您已经安装了Facebook for Mobile,则键入facebook将打开直接链接到Facebook应用程序的链接。

Android的预测性应用程序建议应用程序用户可能要与下一个交互

Slice通过关注用户可能希望在其已安装的应用程序中执行的特定任务,使此应用程序进一步链接了一步。

让我们看一个例子:假设您已经安装了“预订旅馆”应用,该应用可让您搜索旅馆并预订房间。 当您将伦敦的旅馆输入Google时,会遇到通常的搜索结果,以及“预订旅馆”应用程序的一部分。 该分片推荐伦敦的一家酒店,并以按钮的形式显示诸如酒店名称和地址之类的信息以及 SliceAction ,您可以直接从该分片的用户界面(UI)预订房间。

对于用户而言,此片提供了在特定时刻轻松访问他们所需的信息和功能的信息。 对于开发人员而言,这片片刻使他们能够在他们重新获得成功的最大机会的确切时刻,将应用程序展示在用户面前。

如何创建我的第一个切片?

让我们从创建一个简单的切片开始,点击该切片将启动应用程序的MainActivity

这种简单的技术可以直接从切片的UI启动任何任务。 在我们的“预订旅馆”示例中,我们可以仅将按钮链接到相关应用程序的BookRoomActivity ,这将是减少用户完成此特定任务所必须浏览的屏幕数的简单但有效的方法。

首先,创建一个新的Android项目。 您可以使用任何所需的设置,但是请确保在出现提示时选中包括Kotlin支持复选框。

创建项目后,打开其build.gradle文件并添加slice-coreslice-builder依赖项:

dependencies {
   implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
   implementation 'androidx.slice:slice-core:1.0.0-alpha3'
   implementation 'androidx.slice:slice-builders:1.0.0-alpha3'
   implementation 'androidx.constraintlayout:constraintlayout:1.1.0'
   implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

使用分片提供商在Google搜索中显示您的应用内容

接下来,我们需要创建一个slice provider ,它是负责在应用程序上下文之外显示应用程序内容的组件。

您可以使用Android Studio的分片提供程序模板创建分片提供程序:

  • 从Android Studio工具栏中选择新建 > 其他 > 切片提供程序
  • 输入名称MySliceProvider
  • 源语言设置为Kotlin
  • 点击完成
  • 打开MySliceProvider类,您应该看到以下自动生成的代码:
import android.content.ContentResolver
import android.content.Intent
import android.net.Uri
import androidx.slice.Slice
import androidx.slice.SliceProvider
import androidx.slice.builders.ListBuilder

class MySliceProvider : SliceProvider() {
    
  override fun onCreateSliceProvider(): Boolean {
      return true
  }

  override fun onMapIntentToUri(intent: Intent?): Uri {

      var uriBuilder: Uri.Builder = Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT)
      if (intent == null) return uriBuilder.build()
      val data = intent.data
      if (data != null && data.path != null) {
          val path = data.path.replace("/", "")
          uriBuilder = uriBuilder.path(path)
      }
      val context = context
      if (context != null) {
          uriBuilder = uriBuilder.authority(context.getPackageName())
      }
      return uriBuilder.build()
  }

//Construct the slice//

  override fun onBindSlice(sliceUri: Uri): Slice? {
      val context = getContext() ?: return null
      return if (sliceUri.path == "/") {

//Customise the Slice//

          ListBuilder(context, sliceUri)
                  .addRow { it.setTitle("URI found.") }
                  .build()
      } else {
          
          ListBuilder(context, sliceUri)
                  .addRow { it.setTitle("URI not found.") }
                  .build()
      }
  }

//Subscribe to a data source, if necessary//

  override fun onSlicePinned(sliceUri: Uri?) {

  }

//Avoid memory leaks by unsubscribing from the data source and removing any observers//

  override fun onSliceUnpinned(sliceUri: Uri?) {
  }
}

如果您使用新建 > 其他 > 切片提供者创建切片提供 ,那么Android Studio还将在您的清单中添加必要的提供者:

<provider
       android:name=".MySliceProvider"
       android:authorities="com.jessicathornsby.kotlinslices"
       android:exported="true">
       <intent-filter>
           <action android:name="android.intent.action.VIEW" />
           
           <category android:name="android.app.slice.category.SLICE" />

           <data
               android:host="jessicathornsby.com"
               android:pathPrefix="/"
               android:scheme="http" />
       </intent-filter>
   </provider>
</application>

此项确保您的切片可以被其他应用程序发现。

您的Gradle项目同步失败了吗?

到目前为止,我们仅使用了Android Studio自动生成的代码,但是您的项目可能已经拒绝编译!

错误,缺少功能和全面的奇怪行为只是使用早期版本的乐趣的一部分。 在撰写本文时,生成分片提供程序有时会莫名其妙地将一组新的依赖项添加到项目的build.gradle文件中。

implementation 'androidx.slice:slices-core:1.0.0-alpha1'
implementation 'androidx.slice:slices-builders:1.0.0-alpha1'

这些依赖不仅是不必要的,而且是错误的。 尽管很容易错过,但是比较一下:

Slice算子是指对一个多维数组进行切片操作,提取其中的一部分。在ONNX中,slice算子被定义为一个节点(Node),它的输入为待切片的张量(Tensor),输出为切片后的张量(Tensor)。 下面是一个使用ONNX定义slice算子的示例: ``` import onnx from onnx import helper from onnx import TensorProto # 输入张量为一个4维张量[batch_size, channel, height, width] input_tensor = helper.make_tensor_value_info('input_tensor', TensorProto.FLOAT, [1, 3, 224, 224]) # 开始位置和结束位置 starts = [0, 0, 100, 100] ends = [1, 3, 200, 200] # 创建slice节点 slice_node = helper.make_node( 'Slice', inputs=['input_tensor'], outputs=['output_tensor'], starts=starts, ends=ends ) # 创建计算图 graph_def = helper.make_graph( [slice_node], 'slice_graph', [input_tensor], [helper.make_tensor_value_info('output_tensor', TensorProto.FLOAT, [1, 3, 100, 100])] ) # 创建模型 model_def = helper.make_model(graph_def, producer_name='onnx-example') # 将模型保存为ONNX格式 onnx.checker.check_model(model_def) onnx.save_model(model_def, 'slice.onnx') ``` 在上面的代码中,我们使用ONNX提供的helper函数来创建一个slice节点,并将其添加到计算图中。我们还需要定义输入张量和输出张量的shape和类型。最后,我们使用ONNX提供的save_model函数将模型保存为ONNX格式。 相关问题: 1. ONNX是什么? 2. ONNX有哪些常用的模型节点? 3. 如何使用ONNX将已有模型转换成ONNX格式? 4. ONNX模型如何进行推理?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值