Я хочу отправить виджет с моим приложением Cordova. В настоящее время я просто использую стартовый проект Ionic 4 tabs и не изменил никаких данных на src. Я просто добавил туз-плагин и внес изменения в платформы и родную папку (описано внизу). Я делаю учебник по созданию виджета (https://www.codeproject.com/Tips/1218204/How-to-Create-an-Android-Application-Widget-using). Но после всего, что я пробовал, виджет не встречается в списке виджетов моего телефона.
Виджеты должны быть написаны на нативном коде, поэтому я добавил ace-plugin, который добавляет папку с именем «native». В этой папке может быть написан собственный код, который затем отправляется в папку платформы Cordova при сборке. Затем я последовал руководству сверху и добавил приемник и сервис для виджета на платформах Android Manifest и нативный (ace) Android Manifest. Манифест был единственным, я изменил в папке платформы. Все остальные изменения сделаны в родной папке плагина.
Я предоставляю метаданные для виджета в папке res, добавляя list_widget_info.xml и добавляю макеты для виджетов списка, добавляя list_widget_item.xml и list_widget_layout.xml в папку макетов. Также я предоставил изображение в папке drawable. Как 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, потому что если в других файлах должна быть ошибка, виджет должен отображаться в списке виджетов, но не должен использоваться.
Мои вопросы:
- есть ли у кого-то такая же проблема с помощью ace-plugin и знаете решение для отображения виджета в списке виджетов?
- есть какая-то ошибка, я не видел, может в родном коде для создания виджета?
- Правильный ли мой подход, эта ошибка должна зависеть от манифеста Android?
- я могу показать манифест андроида где-нибудь после запуска моего приложения на телефоне?
Я рад каждому совету, которому могу следовать, чтобы решить эту проблему. Спасибо за помощь:)