2013-03-29 25 views
1

我真的很陌生,在製作Android應用程序;只是試圖製作一個簡單的小部件來說明時間。如果點擊它,小部件也會開啓一個基本的活動。 Widget和Activity位於2個不同的項目文件中(在同一個工作區中),所以我必須導入Activity包才能訪問它的類。點擊Widget沒有打開新的活動

整個代碼:

public class FirstWidget extends AppWidgetProvider { 
RemoteViews view = null; 


public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    Intent intent = new Intent(context, MainActivity.class); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
    view = new RemoteViews(context.getPackageName(), R.layout.main); 
    view.setOnClickPendingIntent(R.id.widget_textview, pendingIntent); 
    appWidgetManager.updateAppWidget(new ComponentName(context, FirstWidget.class), view); 


    Timer timer = new Timer(); 
    timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 1000); 
} 
private class MyTime extends TimerTask { 
    AppWidgetManager appWidgetManager; 
    ComponentName thisWidget; 
    DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault()); 

    public MyTime(Context context, AppWidgetManager appWidgetManager) { 
     this.appWidgetManager = appWidgetManager; 
     thisWidget = new ComponentName(context, FirstWidget.class); 
    } 
    public void run() { 
     Calendar cal = format.getCalendar(); 
     int day = cal.get(Calendar.DAY_OF_WEEK); 
     switch (day) { 
     case(2): 
      view.setTextViewText(R.id.widget_textview, "MONDAY TIP " + format.format(new Date())); 
      break; 
     case(3): 
      view.setTextViewText(R.id.widget_textview, "TUESDAY TIP " + format.format(new Date())); 
      break; 
     case(4): 
      view.setTextViewText(R.id.widget_textview, "WEDNESDAY TIP " + format.format(new Date())); 
      break; 
     case(5): 
      view.setTextViewText(R.id.widget_textview, "THURSDAY TIP " + format.format(new Date())); 
      break; 
     case(6): 
      view.setTextViewText(R.id.widget_textview, "FRIDAY TIP " + format.format(new Date())); 
      break; 
     case(7): 
      view.setTextViewText(R.id.widget_textview, "SATURDAY TIP " + format.format(new Date())); 
      break; 
     case(1): 
      view.setTextViewText(R.id.widget_textview, "SUNDAY TIP " + format.format(new Date())); 
      break; 
     } 
     appWidgetManager.updateAppWidget(thisWidget, view); 
    } 
} 
} 

我提出的活性的庫在Eclipse,並通過屬性 - > Android->庫同步時間它到窗口小部件。還通過Properties-> JAva Build Path-> Activity Package將Activity添加到Widget的Java Build路徑。

當我將Widget導入到emultaor中時,Widget和App都會被下載。我也可以把它們都帶到前面的屏幕上。該應用程序按預期工作(點擊按鈕,進入屏幕)。 Widget每秒更新其時間和日期。

但點擊小部件什麼也不做。

現在一直在看不同的教程5個小時。沒有看到我做錯了什麼。任何幫助將是巨大的

+0

如果將其直接添加到項目中(無庫),您的活動是否會打開? – hasanghaforian

+0

不是。我嘗試一下,當它試圖找到我的.class活動(即使它已導入並且Eclipse可以使用它)時,它會中斷它 – user1175688

+0

您是否在Logcat中看到任何錯誤或警告?這兩個Activity都在庫中還是在您的包中? – hasanghaforian

回答

0

似乎沒有施工誤差在AppWigetProvider。而你說你ClassDefNotFoundException如果你的活動不library.So我想問題出在你的「意圖」。它可能如果引起你的Activity沒有在清單中聲明,在創建intent時Activity類的名稱不正確,或者它可能在你的AppWidgetProvider被定義在其中的另一個包中。所以我建議創建一個測試Activity(在AppWidgetProvider的包中)並將其設置爲「啓動器「,然後嘗試從它打開你的」MainActivity「。如果任何意圖成功地打開」MainActivity「,它可能是合適的意圖用於」AppWidgetProvider「創建你的」pendingintent「。

0

終於搞明白了,有兩大問題。

1)我的Widget的清單需要說明的應用,該activites,而不僅僅是主網頁(我的應用程序有2頁)

<activity android:name="com.example.aubreysapp.MainActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <action android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
    <activity android:name="com.example.aubreysapp.DisplayMessageActivity" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <action android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

2)使用的是固定的,我在該得到罵得應用程序無法安裝。沒有選中它是一個圖書館,現在一切都很好。