Показать существующую активность из клика AppWidget - PullRequest
0 голосов
/ 29 сентября 2011

У меня проблема с открытием активности из приложения.Я безуспешно пробовал разные флаги Intent, PendingIntent и режимы запуска.Я читал различные примеры здесь и во многих других местах, не находя решения.

Прямо сейчас, когда я нажимаю кнопку на моем appwidget, он открывает новое действие вместо того, чтобы показывать экземпляр, который уже существует в приложении.Я разместил свой код ниже и надеюсь, что вы мне поможете.

Есть ли способ найти существующее действие и показать его вместо создания нового при нажатии на мою нижнюю часть на виджете приложения?

Манифест:

<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true" android:name="widget.helper.ResourceHelper">
    <activity android:name=".ScoreBoard"
              android:label="@string/app_name"
              >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />                                
        </intent-filter>         
    </activity>


    <!-- Broadcast Receiver that will process AppWidget updates -->
    <receiver android:name="Widget" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_provider" />
    </receiver>     
</application>

Виджет приложения:

public class Widget extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        RemoteViews remoteViews;
        ComponentName thisWidget;
        remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
        thisWidget = new ComponentName(context, Widget.class);
        appWidgetManager.updateAppWidget(thisWidget, remoteViews);
    }

    @Override    
    public void onReceive(Context context, Intent intent)
    { 
        super.onReceive(context, intent);

        if(intent.getAction().equals("OPEN_APP")) {
                Intent i = new Intent(Intent.ACTION_MAIN);
            i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            i.setComponent(new ComponentName("widget","widget.ScoreBoard"));
            ResourceHelper.getScoreBoard().startActivity(i);
        }


    }
}

Ответы [ 2 ]

0 голосов
/ 02 октября 2011

установите для свойства launchMode значение SingleInstance в манифесте.

Сообщите нам, работает ли оно.

Saneesh

0 голосов
/ 30 сентября 2011

Используйте либо FLAG_ACTIVITY_REORDER_TO_FRONT, либо комбинацию из FLAG_ACTIVITY_CLEAR_TOP и FLAG_ACTIVITY_SINGLE_TOP.FLAG_ACTIVITY_CLEAR_TOP без FLAG_ACTIVITY_SINGLE_TOP не будет работать, AFAIK.

...