2012-04-15 76 views
0

我正在开发和Android窗口小部件,我想那小部件是奇异的,这意味着如果用户加入我的小工具,他的主屏幕,他不应该能够再次将其添加到他的屏幕使奇异的Android窗口小部件

+1

你为什么要限制这样的用户,作为好的经验法则,不要阻止你的用户做他们想做的事情,或者他们会找到另一个可以帮助他们的应用程序,帮助他们并让他们变得简单,这就是你如何保持和发展你的用户基ÿ我们的应用程序:) – erbsman 2012-04-15 09:34:31

+0

从我的应用程序使用超过小部件可能会导致我的应用程序的巨大损害! – enGMzizo 2012-04-15 11:26:12

回答

1

有一种变通方法,您可以尝试做到这一点:

1)创建一个公共静态整型变量在你的AppWidgetProvider保持部件的轨道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(); 
     } 
    } 
}