将Android Widget限制为每个设备一个实例

问题描述 投票:10回答:2

我怎样才能限制Android小部件,以便用户始终只能创建一个实例?

一种可能的方法是存储包含SharedPreference变量和崩溃的counter,如果计数为1,但显然我不赞成该解决方案。 ;-)

android android-widget
2个回答
7
投票

我怎样才能限制Android小部件,以便用户始终只能创建一个实例?

你不能。

但是,仅仅因为用户要求您的应用小部件的多个实例并不意味着您必须为每个实例管理单独的数据。只需忽略ID并使用不带任何ID的updateAppWidget()方法。


0
投票

我喜欢这个:

在Widget onUpdate方法上,当用户创建第一个小部件时,我保存小部件的ID并更新小部件,第二次调用onUpdate时(当添加小部件更新时),然后我检查小部件的相同id并更新它,否则告诉用户只允许一个小部件。

 @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

        for (int appWidgetId : appWidgetIds) {

            //TinyDb is SharedPreferences Class
            TinyDB tinydb = new TinyDB(context);
            int WidgetId= tinydb.getInt("WidgetID",-1);

            //Check if WidgetID is same as Added ID if yes UPDATE
            if (WidgetId == appWidgetId){
                updateAppWidget(context, appWidgetManager, appWidgetId);
                return;
            //Check if no widget is added then add widget and save widget ID to sharedPreferences
            } else if (WidgetId == -1){
                tinydb.putInt("WidgetID", appWidgetId);
                updateAppWidget(context, appWidgetManager, appWidgetId);
                return;
            }
            else
                {
                //Make toast to tell the user that only one widget is allowed
                Toast.makeText(context, context.getResources().getString(R.string.Only_one_widget_allowed), Toast.LENGTH_SHORT).show();
                }
        }
    }

并且不要忘记:如果用户删除所有小部件以将其保存到共享首选项,我使用int -1所以我使用此代码:

  @Override
    public void onDisabled(Context context) {
        // Enter relevant functionality for when the last widget is disabled
            TinyDB tinydb = new TinyDB(context);
            tinydb.putInt("WidgetID", -1);
    }

它就像一个魅力! Wholaa!

© www.soinside.com 2019 - 2024. All rights reserved.