我想用我的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-活动”之间)
<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
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
<?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
<?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
<?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中,但不能使用。
我的问题是:
我很高兴我能遵循的每一个提示来解决这个问题。(谢谢你的帮助:)
发布于 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文件夹中,如果我将它复制到它之外,它就不会被使用.
https://stackoverflow.com/questions/55774347
复制相似问题