我是android widget的新手。我做了示例应用程序,想要显示时间。如何从活动中调用widget:
我试过这样但是它说引起:android.content.ActivityNotFoundException:无法找到显式活动类{com.weather/com.weather.CurrentCity};你有没有在AndroidManifest.xml中声明这个活动?
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.weather"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="Weather">
<!-- Broadcast Receiver that will process AppWidget updates -->
<receiver android:name=".CurrentCity" 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/hello_widget_provider" />
</receiver>
<activity android:name=".WeatherActivity"
android:label="Weather Application">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
和我的初始活动:
public class WeatherActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent showContent = new Intent(getApplicationContext(),CurrentCity.class);
startActivity(showContent);
}
和我的小部件活动:
public class CurrentCity extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1,
1000);
}
private class MyTime extends TimerTask {
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault());
public MyTime(Context context, AppWidgetManager appWidgetManager) {
this.appWidgetManager = appWidgetManager;
remoteViews = new RemoteViews(context.getPackageName(),
R.layout.current_weather);
thisWidget = new ComponentName(context, CurrentCity.class);
}
@Override
public void run() {
remoteViews.setTextViewText(R.id.country,"Time = " + format.format(new Date()));
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
}
}
我创建了main.xml&amp; current_weather.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView android:id="@+id/country"
android:text="TextView"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_margin="10dp"
android:textColor="@color/solid_yellow"
></TextView>
</RelativeLayout>
我在res / xml / hello_widget_provider.xml中创建了hello_widget_provider.xml.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="146dip"
android:minHeight="72dip"
android:updatePeriodMillis="10000"
android:initialLayout="@layout/main"
/>
请帮帮我
提前致谢
答案 0 :(得分:4)
你想要做的事实际上是不可能的。你这样做:
Intent showContent = new Intent(getApplicationContext(),CurrentCity.class);
startActivity(showContent);
您不能以这种方式调用窗口小部件:窗口小部件没有您可以显示的活动。
您需要密切关注http://developer.android.com/guide/topics/appwidgets/index.html上的教程:我真的没有简单的方法将您的代码转换为工作小部件,但指南中包含了您需要知道/做的所有事情一个工作小部件。
编辑:请注意,您的窗口小部件必须添加到窗口小部件容器(可能是主屏幕),并且无法以编程方式添加。 Android设备的用户必须手动执行此操作。
答案 1 :(得分:0)
我尝试以多种方式做到这一点。但是,在Android中没有意图或类似的替代方案,它可以通过活动调用小部件(我的意思是应用程序)。您必须拖动窗口小部件并将其放在主屏幕上。
但是,是的,其他方式是可能的!