我正在尝试构建一个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>
答案 0 :(得分:0)
我不确定这些其他示例的设计目的是什么,但Android Studio I的版本使用 - 1.2.2 - 的方式有所不同。我找到了下面的例子,并且能够得到一个小部件的工作shell,这就是我想要的。即便是这样,在编译和运行之前需要进行许多小的调整,但我确实得到了它。
格雷格
http://www.clearcreekcode.com/create-a-widget-in-android-studio/