小部件加载为app

时间:2015-06-21 20:08:24

标签: android widget

我正在尝试构建一个hello world小部件,我遵循了三个不同的示例,每次我的apk加载主要活动作为应用程序而不是小部件。在最后一个示例中,它显示了一个没有活动块的清单。当我从清单中取出主要活动并且只有接收器块时,Android Studio会抛出一个未找到的默认活动的例外。这就是我从示例中得到的一个区别。我有一个< *活动>在清单中阻止。

我在Android Studio 1.0.2中。可能导致这种情况的原因是什么?

我当前的代码基于此示例 http://www.vogella.com/tutorials/AndroidWidgets/article.html

http://www.sitepoint.com/how-to-code-an-android-widget/

https://looksok.wordpress.com/2012/12/15/android-complete-widget-tutorial-including-source-code/

AndroidMainfest.xml

<?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.me.countdown" >

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>
    <receiver android:name="MyWidgetProvider" >
        <intent-filter >
            <action
                android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/widget_info" />
    </receiver>
</application>

</manifest>

MyWidgetProvider.xml

public class MyWidgetProvider extends AppWidgetProvider {

private static final String ACTION_CLICK = "ACTION_CLICK";

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                     int[] appWidgetIds) {

    // Get all ids
    ComponentName thisWidget = new ComponentName(context,
            MyWidgetProvider.class);
    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
    for (int widgetId : allWidgetIds) {
        // create some random data
        int number = (new Random().nextInt(100));

        RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                R.layout.widget_layout);
        Log.w("WidgetExample", String.valueOf(number));
        // Set the text
        remoteViews.setTextViewText(R.id.update, String.valueOf(number));

        // Register an onClickListener
        Intent intent = new Intent(context, MyWidgetProvider.class);

        intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);

        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
                0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
        appWidgetManager.updateAppWidget(widgetId, remoteViews);
    }
}
}
res / xml下的

widget_info.xml

 \<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget_layout"
android:minHeight="72dp"
android:minWidth="300dp"
android:updatePeriodMillis="300000" >

</appwidget-provider> 

1 个答案:

答案 0 :(得分:0)

我不确定这些其他示例的设计目的是什么,但Android Studio I的版本使用 - 1.2.2 - 的方式有所不同。我找到了下面的例子,并且能够得到一个小部件的工作shell,这就是我想要的。即便是这样,在编译和运行之前需要进行许多小的调整,但我确实得到了它。

格雷格

http://www.clearcreekcode.com/create-a-widget-in-android-studio/