2014-02-11 48 views
3

所以,我很難弄清楚如何讓我的應用程序小部件以我想要的方式工作,或者甚至有可能。小部件setOnClickPendingIntent

這個小工具有一個ImageView,我給它分配一個setOnClickPendingIntent。不過,我想要完成的基本上只是實例化一個類,並在用戶點擊應用程序窗口中的ImageView時調用該類中的方法。然而,我怎樣才能讓PendingIntent做別的事情,而不僅僅是開展一項活動呢?不知道這是否有意義,但我真的很感謝幫助。

  // Create an Intent to launch MainActivity 
      Intent intent = new Intent(context, MainActivity.class); 
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
        /** 
        /* However, I want to simply do something like this 
        /* MyClass mc = new MyClass(context); 
        /* mc.toggleEnable(); 
        */ 

      // Get the layout for the App Widget and attach an on-click listener 
      // to the button 
      RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
      views.setOnClickPendingIntent(R.id.imageViewWidgetToggle, pendingIntent); 

回答

12

您可以使用PendingIntent.getBroadcast將在您的AppWidgetProvider類接收:

Intent intent = new Intent(context, YourAppWidgetProvider.class); 
intent.setAction("use_custom_class"); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
views.setOnClickPendingIntent(R.id.imageViewWidgetToggle, pendingIntent); 

然後在AppWidgetProvider

@Override 
public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 

    String action = intent.getAction(); 
    String actionName = "use_custom_class"; 

    if (actionName.equals(action)) { 
     MyClass mc = new MyClass(context); 
     mc.toggleEnable(); 
    } 
} 

the docs about PendingIntent看一看有關標誌的詳細信息使用。我希望我正確理解你的問題,我的回答對你有意義:)如果不是,請不要猶豫,讓我知道...

+0

這看起來完全像我需要的!我試着去看看它是如何收費並讓你知道的。謝謝 – ardevd

+1

順便說一句,你在第3行有一個括號太多;) – ardevd

+1

工作完美,謝謝! – ardevd