0

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

4

1 回答 1

1

您可以尝试使用一种解决方法来完成此操作:

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

2)为小部件创建一个配置活动(此处的说明https://developer.android.com/guide/topics/appwidgets/index.html#Configuring

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

您的代码可能如下所示:

在您的提供商中:

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();
        }
    }
}
于 2015-05-15T16:36:47.820 回答