首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有离子柯多瓦和科多瓦插件的主屏幕小部件

带有离子柯多瓦和科多瓦插件的主屏幕小部件
EN

Stack Overflow用户
提问于 2019-04-20 14:15:43
回答 1查看 1.7K关注 0票数 2

我想用我的Cordova应用程序发布一个小部件。目前,我只是使用Ionic 4标签启动项目,没有改变任何数据上的src。我刚刚添加了ace插件,并在平台和本机文件夹中进行更改(在底部描述)。我做了一些关于创建Widget (https://www.codeproject.com/Tips/1218204/How-to-Create-an-Android-Application-Widget-using)的教程。但是,在我试过之后,这个小部件不在我手机的wigetlist中。

小部件需要用本机代码编写,所以我添加了ace插件,它添加了一个名为“本机”的文件夹。在此文件夹中,可以编写本机代码,然后在构建时将其转移到cordova的Platforms文件夹中。然后,我按照上面的教程,在Android和本机(ace) Android平台中添加了小部件的接收器和服务。清单是唯一的,我更改了平台文件夹。在插件的本机文件夹中所做的所有其他更改。我通过添加list_widget_info.xml为res文件夹中的小部件提供元数据,并通过将list_widget_item.xml和list_widget_layout.xml添加到布局文件夹中来添加列表小部件的布局。此外,我在绘图文件夹中提供了一个图像。作为WidgetProvider,我将ListWidgetProvider.java添加到src/io/离子型/初学者文件夹中。生成之后,本机文件夹中的所有内容都将以正确的方式发送到平台文件夹。

AndroidMaifest.xml (在创建的活动和“Ace-活动”之间)

代码语言:javascript
复制
<receiver android:name="io.ionic.starter.ListWidgetProvider">
   <intent-filter>
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>
   <meta-data android:name="android.appwidget.provider" android:resource="@xml/list_widget_info"/>
</receiver>
<service android:exported="false" android:name="run.ace.AppWidgetService" android:permission="android.permission.BIND_REMOTEVIEWS" />

ListWidgetProvider.java

代码语言:javascript
复制
package io.ionic.starter;

public class ListWidgetProvider extends run.ace.AppWidgetProvider {

   @Override
   protected int getLayoutResourceId(android.content.Context context) {
     return run.ace.NativeHost.getResourceId("list_widget_layout", "layout", context);
   }

   @Override
   protected int getViewResourceId(android.content.Context context) {
     return run.ace.NativeHost.getResourceId("list_widget_view", "id", context);
   }

   @Override
   protected int getItemResourceId(android.content.Context context) {
     return run.ace.NativeHost.getResourceId("list_widget_item", "id", context);
   }

   @Override
   protected int getItemTextResourceId(android.content.Context context) {
     return run.ace.NativeHost.getResourceId("list_widget_item_text", "id", context);
   }

   @Override
   protected int getItemLayoutResourceId(android.content.Context context) {
     return run.ace.NativeHost.getResourceId("list_widget_item", "layout", context);
   }
}

list_widget_info.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:minWidth="250dp"
  android:minHeight="40dp"
  android:resizeMode="horizontal|vertical"
  android:updatePeriodMillis="86400000"
  android:previewImage="@drawable/list_widget_preview"
  android:initialLayout="@layout/list_widget_layout">
</appwidget-provider>

list_widget_item.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_widget_item"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  <TextView
    android:id="@+id/list_widget_item_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:textColor="#ffffff"
    android:textSize="40px" />
</FrameLayout>

list_widget_layout.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_widget_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:loopViews="true" />

在我看来,这可能是android清单中的一些错误,因为如果其他文件出现错误,小部件应该显示在Widgetlist中,但不能使用。

我的问题是:

  • 是否有人在使用ace-plugin时遇到了同样的问题,并且知道在widgetlist中显示小部件的解决方案?
  • 是否有一些错误,我还没有看到,也许在本机代码中产生了一个小部件?
  • 我的方法正确吗,这个错误应该依赖于?
  • 在我的应用程序在手机上运行之后,我能在某个地方显示android清单吗?

我很高兴我能遵循的每一个提示来解决这个问题。(谢谢你的帮助:)

EN

回答 1

Stack Overflow用户

发布于 2019-05-05 07:24:49

所以至少我有一些改进。我发现,我的项目实际上并没有在platforms/android文件夹中使用AndroidManifest,但是在platforms/android/app中使用了该项目。因此,如果我手动复制我在应用程序文件夹中提供的问题中提供的所有文件,它的工作方式与教程中所期望的一样。此外,我还需要导入插件get (cordova.js)到index.html中的文件。通常情况下,应该使用create命令来生成.

另外,如果我想在Widget中使用Listview,那么提供的WidgetService对我来说是行不通的。因此,我将其从AndroidManifest中删除,并使用自己的服务,就像在本地应用程序中一样。因此,android.appwidget不能工作,但是我也可以通过“手动”调用它来使用它。

所以我已经得到了这个小部件,但是仍然有一些问题,为什么它需要在platforms/android/app文件夹中,如果我将它复制到它之外,它就不会被使用.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55774347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档