AppWidget 在配置 activity 完成后崩溃启动器(仅限小米和华为)
AppWidget crashes launcher after configuration activity finish (Xiaomi and Huawei only)
我正在尝试在设备主页上显示 AppWidget。不知道为什么,只在小米和华为设备上不行。
当我在主屏幕上拖动小部件时,它会很好地打开我的配置 activity。
我使用 :
关闭 activity
private void saveConfig() {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
ComponentName thisAppWidget = new ComponentName(getPackageName(),
ConfigActivity.class.getName());
Intent updateIntent = new Intent(this, ConfigActivity.class);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
updateIntent.setAction(ACTION_APPWIDGET_UPDATE);
updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
setResult(RESULT_OK, updateIntent);
finish();
}
在那之后,启动器似乎有问题:屏幕变黑,最近的应用程序抽屉打开,我不在同一页面上……
LogCat没有什么特别的。
三星或 OnePlus 等其他设备一切正常。
有人遇到过类似的问题吗?
Manifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@drawable/ic_launcher_round"
android:usesCleartextTraffic="true"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning"
tools:targetApi="m">
<activity
android:name="com.######.presentation.activity.ConfigActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>
</activity>
<activity
android:name=".presentation.activity.HomeActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"/>
<activity
android:name=".presentation.activity.LegalNoticeActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"/>
<receiver
android:name="com.######.provider.EnergyMixWidgetProvider"
android:icon="@drawable/ic_launcher_round"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/appwidget_info" />
</receiver>
<receiver android:name=".presentation.receiver.NotificationActionReceiver"/>
<service android:name=".data.service.ListenerService" />
</application>
appwidget_provider
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialKeyguardLayout="@layout/app_widget_4"
android:initialLayout="@layout/app_widget_4"
android:minHeight="110dp"
android:minWidth="250dp"
android:updatePeriodMillis="0"
android:resizeMode="horizontal"
android:widgetCategory="home_screen"
android:previewImage="@mipmap/ic_launcher"
android:configure="com.########.presentation.activity.ConfigActivity"/>
如有任何帮助,我们将不胜感激
编辑
如果我从 apwidget-provider 的 android:configure
属性中删除配置 activity,appwidget 会出现 在主屏幕上。
它让我认为问题出在我的配置结果中发送的意图 activity
您正在传递一组小部件 ID。尝试将您的代码更改为:
在onCreate中添加
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
然后做:
private void saveConfig() {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ConfigActivity.updateAppWidget(context, appWidgetManager, mAppWidgetId);
Intent updateIntent = new Intent();
updateIntent .putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, updateIntent);
finish();
}
方法一,进入phone设置,找到华为桌面程序,选择清除缓存,切换到桌面。
方法二,您是否安装了第三方手机管家应用?尝试卸载它。图标修复的主要原因可能是主题。换个主题试试,非自备主题可以切换回默认主题。
方法三、锁屏不旋转不横屏
方法四,重置华为桌面应用。
- 点击设置
- 点击应用程序
- 点击应用管理
- 点击华为桌面
- 点击存储
- 点击删除数据
- 点击删除
我正在尝试在设备主页上显示 AppWidget。不知道为什么,只在小米和华为设备上不行。
当我在主屏幕上拖动小部件时,它会很好地打开我的配置 activity。 我使用 :
关闭 activityprivate void saveConfig() {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
ComponentName thisAppWidget = new ComponentName(getPackageName(),
ConfigActivity.class.getName());
Intent updateIntent = new Intent(this, ConfigActivity.class);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
updateIntent.setAction(ACTION_APPWIDGET_UPDATE);
updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
setResult(RESULT_OK, updateIntent);
finish();
}
在那之后,启动器似乎有问题:屏幕变黑,最近的应用程序抽屉打开,我不在同一页面上……
LogCat没有什么特别的。
三星或 OnePlus 等其他设备一切正常。
有人遇到过类似的问题吗?
Manifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@drawable/ic_launcher_round"
android:usesCleartextTraffic="true"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning"
tools:targetApi="m">
<activity
android:name="com.######.presentation.activity.ConfigActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>
</activity>
<activity
android:name=".presentation.activity.HomeActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"/>
<activity
android:name=".presentation.activity.LegalNoticeActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"/>
<receiver
android:name="com.######.provider.EnergyMixWidgetProvider"
android:icon="@drawable/ic_launcher_round"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/appwidget_info" />
</receiver>
<receiver android:name=".presentation.receiver.NotificationActionReceiver"/>
<service android:name=".data.service.ListenerService" />
</application>
appwidget_provider
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialKeyguardLayout="@layout/app_widget_4"
android:initialLayout="@layout/app_widget_4"
android:minHeight="110dp"
android:minWidth="250dp"
android:updatePeriodMillis="0"
android:resizeMode="horizontal"
android:widgetCategory="home_screen"
android:previewImage="@mipmap/ic_launcher"
android:configure="com.########.presentation.activity.ConfigActivity"/>
如有任何帮助,我们将不胜感激
编辑
如果我从 apwidget-provider 的 android:configure
属性中删除配置 activity,appwidget 会出现 在主屏幕上。
它让我认为问题出在我的配置结果中发送的意图 activity
您正在传递一组小部件 ID。尝试将您的代码更改为:
在onCreate中添加
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
然后做:
private void saveConfig() {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ConfigActivity.updateAppWidget(context, appWidgetManager, mAppWidgetId);
Intent updateIntent = new Intent();
updateIntent .putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, updateIntent);
finish();
}
方法一,进入phone设置,找到华为桌面程序,选择清除缓存,切换到桌面。
方法二,您是否安装了第三方手机管家应用?尝试卸载它。图标修复的主要原因可能是主题。换个主题试试,非自备主题可以切换回默认主题。
方法三、锁屏不旋转不横屏
方法四,重置华为桌面应用。
- 点击设置
- 点击应用程序
- 点击应用管理
- 点击华为桌面
- 点击存储
- 点击删除数据
- 点击删除