是否有可能找出android小部件是放在锁屏还是主屏上?

是否有可能找出android小部件是放在锁屏还是主屏上?,android,Android,是否有可能找出android小部件是放在锁屏还是主屏上? 我可以想象它在广播提供商的某个地方,这样我就可以了解用户是如何在4.2+上使用它的。以下是来自: “您可以通过调用getAppWidgetOptions()将小部件的选项作为一个包获取,来检测小部件是在键盘护卫(锁屏)还是主屏幕上 返回的捆绑包将包括键选项\u APPWIDGET\u HOST\u CATEGORY,其值将是小部件\u CATEGORY\u HOME\u屏幕或小部件\u CATEGORY\u KEYGUARD中的一个 一旦

是否有可能找出android小部件是放在锁屏还是主屏上?
我可以想象它在广播提供商的某个地方,这样我就可以了解用户是如何在4.2+上使用它的。

以下是来自:

“您可以通过调用
getAppWidgetOptions()
将小部件的选项作为一个包获取,来检测小部件是在键盘护卫(锁屏)还是主屏幕上

返回的捆绑包将包括键
选项\u APPWIDGET\u HOST\u CATEGORY
,其值将是
小部件\u CATEGORY\u HOME\u屏幕
小部件\u CATEGORY\u KEYGUARD
中的一个

一旦知道小部件的类别,您可以选择加载不同的基本布局、设置不同的属性等。例如:


当我尝试使用它并在非4.2设备上运行时,我得到了错误java.lang.NoSuchMethodError:android.appwidget.AppWidgetManager。getAppWidgetOptions@user1492955,如果设备低于4.2(低于api级别17),则其锁屏上不能有小部件(因为当时未引入该功能),因此,您可以自动假定它是从主屏幕启动的。在我的下一条评论中,您需要添加代码来排除api级别17.if(Build.VERSION.SDK_INT<17){}else{
AppWidgetManager appWidgetManager;
int widgetId;
Bundle myOptions = appWidgetManager.getAppWidgetOptions (widgetId);

// Get the value of OPTION_APPWIDGET_HOST_CATEGORY
int category = myOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY, -1);

// If the value is WIDGET_CATEGORY_KEYGUARD, it's a lockscreen widget
boolean isKeyguard = category == AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD;
int baseLayout = isKeyguard ? R.layout.keyguard_widget_layout : R.layout.widget_layout;