android主屏幕小部件onReceive()调用自定义意图

时间:2015-11-08 21:43:40

标签: android widget android-widget appwidgetprovider

我正在尝试使用3个按钮创建主屏幕小部件。为了测试代码,onReceive()我暂时调用相同的活动。 我正在按照以下教程进行操作。

http://www.byteslounge.com/tutorials/modal-popup-from-android-widget-example

http://www.javacodegeeks.com/2013/05/modal-dialog-popup-from-android-widget-example.html

为一个按钮的主屏幕小部件很好地解释了。但是,当我单击任何按钮时,onReceive()不会被调用。但是在将小部件添加到主屏幕或从按钮点击而不是按钮点击时调用onReceive()。

我需要为不同的按钮调用不同的活动。但onReceive()本身没有被调用。即使在调试过程中也无法确定我的错误。

当我点击主屏幕小工具上的任何按钮时,什么也没发生。

下面是android清单文件

            <receiver
        android:name=".MyWidgetProvider" >
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            <action android:name="com.test.testapp1.action.HANDLE_1" />
            <action android:name="com.test.testapp1.action.HANDLE_2" />
            <action android:name="com.test.testapp1.action.HANDLE_3" />
        </intent-filter> <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/tagit_widget_provider" />
    </receiver>
</application>

以下是MyWidgetProvider代码:

    public class MyWidgetProvider extends AppWidgetProvider {
private static final String ACTION_HANDLE_1 = "com.test.testapp1.action.HANDLE_1";
private static final String ACTION_HANDLE_2 = "com.test.testapp1.action.HANDLE_2";
private static final String ACTION_HANDLE_3 = "com.test.testapp1.action.HANDLE_1";

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    for(int i = 0; i < appWidgetIds.length; i++) {
        int appid = appWidgetIds[i];
        Intent intent = new Intent(context, MainActivity.class);
        intent.setAction(ACTION_HANDLE_1);
        //PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, launchActivity, 0);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

        views.setOnClickPendingIntent(R.id.widget_text1, pendingIntent);
        intent.setAction(ACTION_HANDLE_2);
        views.setOnClickPendingIntent(R.id.widget_text2, pendingIntent);

        intent.setAction(ACTION_HANDLE_3);
        views.setOnClickPendingIntent(R.id.widget_text3, pendingIntent);
        appWidgetManager.updateAppWidget(appid, views);
    }

}

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

    if(intent.getAction().equals(ACTION_HANDLE_1)) {
        Intent intent1 = new Intent(context, HelpActivity.class);
        intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent1);

    } else if(intent.getAction().equals(ACTION_HANDLE_2)) {
        Intent intent1 = new Intent(context, HelpActivity.class);
        intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent1);

    } else if(intent.getAction().equals(ACTION_HANDLE_3)) {
        Intent intent1 = new Intent(context, HelpActivity.class);
        intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent1);

    }
    super.onReceive(context, intent);
}

}

logcat中没有显示错误。

第二个问题是关于android 5.0,小部件正在显示(包括物理手机和模拟器)但是android 4.3模拟器,小部件没有显示小部件的选择。

无法弄清楚我做错了什么。

0 个答案:

没有答案