2012-04-15 17 views
0

Ich entwickle und Android-Widget und ich mag, dass Widget singulär sein, was bedeutet, wenn der Benutzer meinen Widget auf seinen Home-Bildschirm hinzugefügt er nicht in der Lage sein sollte, um es hinzuzufügen wieder zu seinem BildschirmMake Singular Android Widget

+1

Warum würden Sie den Benutzer auf diese Weise einschränken wollen, wie ein Gute Faustregel, hindern Sie Ihre Benutzer NICHT daran, Dinge zu tun, die sie tun möchten, oder sie werden eine andere Anwendung finden, die das für sie tut, ihnen hilft und ihnen die Dinge leichter macht, so halten und vergrößern Sie Ihre Benutzerdatenbank y unsere App :) – erbsman

+0

Die Verwendung von mehr als Widget aus meiner App kann massiven Schaden für meine Anwendung verursachen! – enGMzizo

Antwort

1

es gibt eine Abhilfe Sie könnten versuchen, dies zu tun:

1) erstellen Sie einen öffentlichen statischen Integer-Variable in Sie Spur des Widgets Id AppWidgetProvider zu halten, es anfänglich

2 auf null) erstellen Sie eine Konfigurations Aktivität für das Widget (Anweisungen dafür sind hier https://developer.android.com/guide/topics/appwidgets/index.html#Configuring)

3) Überprüfen Sie in Ihrer Konfigurationsaktivität den Status der Variablen im Provider. Wenn ein Widget bereits erstellt wurde (die ID ist nicht gleich null), können Sie dem Benutzer eine Nachricht mit einem AlertDialog anzeigen und dann das Ergebnis als abgebrochen festlegen.

Code könnte wie folgt aussehen:

In Ihrem Provider:

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); 
    } 
} 

In Ihrer Konfiguration Aktivität

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(); 
     } 
    } 
}