2013-10-22 19 views
0

我做了白色的小部件,它運行完美,按下按鈕的作品像一個魅力,但我需要掛鉤活動到這個小部件。我還需要在這些按鈕事件上調用活動方法。我搜索了很多帖子,每個人都在製作簡單的小部件,只是顯示一些文本。如何將活動連接到小部件?

如果活動尚未運行並且已掛起(如果已在運行),則需要啓動該活動。

這裏的AppWidgetProvider類:

import android.app.PendingIntent; 
import android.appwidget.*; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.hardware.Camera.PreviewCallback; 
import android.widget.RemoteViews; 

public class MusicWidget extends AppWidgetProvider { 
    private static final String PLAY_CLICKED = "MusicWidget.PLAY"; 
    private static final String PREV_CLICKED = "MusicWidget.PREV"; 
    private static final String NEXT_CLICKED = "MusicWidget.NEXT"; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) { 
     RemoteViews remoteViews; 
     ComponentName watchWidget; 

     remoteViews = new RemoteViews(context.getPackageName(), 
       R.layout.widget_layout); 
     watchWidget = new ComponentName(context, MusicWidget.class); 
     remoteViews.setOnClickPendingIntent(R.id.wbtnPlay, 
       getPendingSelfIntent(context, PLAY_CLICKED)); 
     remoteViews.setOnClickPendingIntent(R.id.wbtnPrevious, 
       getPendingSelfIntent(context, PREV_CLICKED)); 
     remoteViews.setOnClickPendingIntent(R.id.wbtnNext, 
       getPendingSelfIntent(context, NEXT_CLICKED)); 
     appWidgetManager.updateAppWidget(watchWidget, remoteViews); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 
     System.err.println("RECEIVE!"); 
     if (PLAY_CLICKED.equals(intent.getAction())) { 

     } else if (PREV_CLICKED.equals(intent.getAction())) { 

     } else if (NEXT_CLICKED.equals(intent.getAction())) { 

     } 
    } 

    protected PendingIntent getPendingSelfIntent(Context context, String action) { 
     Intent intent = new Intent(context, getClass()); 
     intent.setAction(action); 
     return PendingIntent.getBroadcast(context, 0, intent, 0); 
    } 
} 

回答

1

您可以通過從窗口小部件發送的目的與您的活動溝通:

// WidgetProvider.class 

Intent launchIntent = new Intent(context, YourActivity.class); 
launchIntent.setAction(Intent.ACTION_MAIN); 
launchIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
launchIntent.putExtra("com.Company.App.LaunchWidget", true); // an extra to tell your activity its being launced from the widget 
. 
. // set additional extras to pass data to your activity 
. 
context.startActivity(launchIntent); 

的CATEGORY_LAUNCHER和ACTION_MAIN將確保您的主要活動啓動,如果沒有運行。

在你的活動中,您將收到的onCreate意向(如果活動需要創建)或onNewIntent(如果活動已經運行)

// YourActivity.class 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    . 
    . 
    . 
    myIntentHandler(getIntent()); 
} 

@Override 
void onNewIntent(Intent intent) 
{ 
    myIntentHandler(intent); 
} 

void myIntentHandler(Intent intent) 
{ 
Bundle extras = intent.getExtras(); 
if ((extras != null) && (extras.getBoolean("com.Company.App.LaunchWidget") == true)) 
{ 
    // this intent is from the widget 
} 
} 
+0

所以basicaly我需要認識到在這個onNewIntent方法意圖活動本身? – Dejan

+0

是的,通過附加數據傳遞數據並在myIntentHandler中執行某些操作,如果需要,您甚至可以在那裏啓動另一個活動 – CSmith

+0

我現在就試試,如果一切正常,我會發布。 – Dejan

相關問題