2011-08-15 27 views
0

我是新到Android widget.I做示例應用程序,即要顯示的時間。如何從活動部件撥打:如何呼籲活動部件(窗口小部件從活動調用)

我想這樣的,但它說引起: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" /> 

和我initail活動:

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 & 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

另外,不要使用TimerTask。這不會如你所料。在你的onUpdate()中做所有的事情,這是以每30分鐘的最大速率調用的。 – swinefeaster

回答

4

什麼你試圖做的事實際上是不可能的。你這樣做:

Intent showContent = new Intent(getApplicationContext(),CurrentCity.class); 
    startActivity(showContent); 

不能調用控件是這樣的:一個部件沒有可以顯示的活動。

您需要非常仔細地跟隨http://developer.android.com/guide/topics/appwidgets/index.html的教程:我可以想到將代碼轉換爲工作小部件的真正簡潔方法,但該指南提供了您需要知道/做的一切工作來製作工作小部件。

編輯:請注意,您的小部件必須添加到小部件容器(可能是主屏幕),並且不能通過編程方式添加。 Android設備的用戶必須手動執行此操作。

+0

謝謝你澄清我對小部件的困惑。我刪除了'weatherActitvity'來清單文件。現在它的工作正常。 – Piraba

0

我試圖以許多不同的方式做到這一點。但是,在Android中沒有意圖或類似的選擇,它可以通過活動(我的意思是應用程序)調用一個小部件。您必須拖動小部件並將其放到主屏幕上。

但是,是的,其他方式是可能的!