制作单一的Android小部件

制作单一的Android小部件,android,widget,homescreen,Android,Widget,Homescreen,我正在开发Android widget,我希望该widget是单数的,这意味着如果用户将我的widget添加到他的主屏幕上,他将无法再次将其添加到他的屏幕上有一种解决方法,您可以尝试实现这一点: 1) 在AppWidgetProvider中创建一个公共静态整数变量以跟踪小部件Id,最初将其设置为null 2) 为小部件创建配置活动(此处有相关说明) 3) 在配置活动中,检查提供程序中变量的状态。如果已经创建了小部件(id不等于null),则可以使用AlertDialog向用户显示消息,然后将结果

我正在开发Android widget,我希望该widget是单数的,这意味着如果用户将我的widget添加到他的主屏幕上,他将无法再次将其添加到他的屏幕上

有一种解决方法,您可以尝试实现这一点:

1) 在AppWidgetProvider中创建一个公共静态整数变量以跟踪小部件Id,最初将其设置为null

2) 为小部件创建配置活动(此处有相关说明)

3) 在配置活动中,检查提供程序中变量的状态。如果已经创建了小部件(id不等于null),则可以使用AlertDialog向用户显示消息,然后将结果设置为cancelled

您的代码可能如下所示:

在您的提供商中:

public class MyAppWidgetProvider extends AppWidgetProvider {
    public static Integer widgetId;

    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        //If the current widget has been deleted, set widget id to null again
        for(int i = 0; i < appWidgetIds.length; i++){
            if(widgetId == appWidgetIds[i]){
                widgetId = null;
            }
        }
        super.onDeleted(context, appWidgetIds);
    }
}

作为一个好的经验法则,你为什么要以这种方式限制用户,不要阻止你的用户做他们想做的事情,否则他们会找到另一个为他们做的应用程序,帮助他们,让事情变得简单,这就是你如何保持和扩大你的应用程序的用户群:)使用我的应用程序中的多个小部件可能会对我的应用程序造成巨大的损害!
public class ConfigurationActivity extends Activity {
    public int appWidgetId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        Bundle extras = intent.getExtras();
        if (extras != null) {
            appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,  AppWidgetManager.INVALID_APPWIDGET_ID);
        }

        if(MyAppWidgetProvider.widgetId != null){
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("Widget already created");
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Intent resultValue = new Intent();
                    resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
                    setResult(RESULT_CANCELED, resultValue);
                    finish();
                }
            });
            AlertDialog dialog = builder.create();
            dialog.show();
        } else {
            MyAppWidgetProvider.widgetId = appWidgetId;
            Intent resultValue = new Intent();   
            resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
            setResult(RESULT_OK, resultValue);      
            finish();
        }
    }
}