【发布时间】:2019-09-10 11:06:18
【问题描述】:
我想通过我的 Cordova 应用程序发送一个小部件。目前我只使用 Ionic 4 tabs 启动项目,并没有更改 src 上的任何数据。我刚刚添加了 ace-plugin 并在平台和本机文件夹中进行了更改(在底部进行了描述)。我做了一些关于创建小部件的教程 (https://www.codeproject.com/Tips/1218204/How-to-Create-an-Android-Application-Widget-using)。但毕竟我已经尝试过,小部件并没有出现在我手机的小部件列表中。
小部件需要用本机代码编写,所以我添加了 ace-plugin,它添加了一个名为“native”的文件夹。在此文件夹中可以编写本机代码,然后在构建时将其发送到 cordova 的平台文件夹。然后我按照上面的教程,在平台 Android Manifest 和本机 (ace) Android Manifest 中添加了小部件的接收器和服务。清单是唯一的,我在平台文件夹中进行了更改。在插件的本机文件夹中进行的所有其他更改。 我通过添加 list_widget_info.xml 为 res 文件夹中的小部件提供元数据,并通过将 list_widget_item.xml 和 list_widget_layout.xml 添加到布局文件夹来添加列表小部件的布局。我还在可绘制文件夹中提供了一个图像。作为 WidgetProvider,我将 ListWidgetProvider.java 添加到 src/io/ionic/starter 文件夹中。 构建后,本机文件夹中的所有内容都会以正确的方式传送到平台文件夹。
AndroidMaifest.xml(在创建的活动和'Ace-activity'之间
<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 中,但不可用。
我的问题是:
- 有没有人通过使用 ace-plugin 遇到同样的问题,并且知道在 widgetlist 中显示小部件的解决方案?
- 是否有一些错误,我没有看到,可能在本机代码中生成一个小部件?
- 我的方法是否正确,这个错误应该取决于 Android Manifest?
- 我可以在手机上运行我的应用程序后的某处显示 android 清单吗?
我很高兴我可以遵循每一个提示来解决这个问题。感谢您的帮助:)
【问题讨论】:
-
谢谢,我会试试的。因为我希望在我的应用程序中有原生的感觉..
标签: android ionic-framework widget cordova-plugins android-manifest