2011-05-06 87 views
5

我閱讀了hellowidget教程和Dev Guide'App Widgets。然後我知道如何創建一個包含按鈕或文本或其他東西的小部件。如何在活動和小部件之間共享數據?

但我真正想做的是讓它與我的應用程序進行交互。例如,我想創建一個具有文本視圖的小部件,並且當我單擊它時,它會將PendingIntent發送到我可以編輯文本的活動中。

我可以做「發送PendingIntent」的步驟。但是,當我用acitivy編輯文本後,小部件如何讀取它?

回答

1

你必須使用RemoteViews類來完成它。創建你的AppWidgetProvider的onRefresh方法中RemoteViews類的實例,並使用方法吧...

RemoteViews views = RemoteViews(packageName, layoutId); 
views.setOnClickPendingIntent(viewId, pendingIntent); 

注意RemoteViews在功能時,與標準應用相比,意見的限制。但是,你可以通過他們提供的東西來實現你想要做的。

+0

我可以執行「發送PendingIntent」的步驟。你回答的是這一步。 – 2011-05-06 16:45:56

+0

哎呀好的...然後,您必須從您的小部件可以收聽的活動中播出另一個意圖。讓小部件可以使用的意圖中的數據自行刷新。 – 2011-05-06 16:49:19

8

你需要做的是註冊自定義的意圖,例如在你的AppWidgetProvider ACTION_TEXT_CHANGED像這樣的例子:

public static final String ACTION_TEXT_CHANGED = "yourpackage.TEXT_CHANGED"; 

在此之後,您需要在AndroidManifest.xml中註冊要接收這個意圖在您的接收器標籤這樣的意圖濾波部:

<receiver android:name=".DrinkWaterAppWidgetProvider"> 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     <action android:name="yourpackage.TEXT_CHANGED" />     
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider" 
     android:resource="@xml/appwidget_info" /> 
</receiver> 

然後,你必須在你的AppWidgetProvider延長的onReceive方法,並確保你正在處理你的意圖是這樣的:

@Override 
public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 
    if (intent.getAction().equals(ACTION_TEXT_CHANGED)) { 
     // handle intent here 
     String s = intent.getStringExtra("NewString"); 
    } 
} 

畢竟上面的設置,你只需要播放您的活動意圖的文本已更改後是這樣的:

Intent intent = new Intent(YourAppWidgetProvider.ACTION_TEXT_CHANGED); 
intent.putExtra("NewString", textView.getText().toString()); 
getApplicationContext().sendBroadcast(intent); 

其中「NewString」應改爲這個名字你給字符串。

我希望它有幫助。

+0

你能幫我嗎我有問題將我的數據從我的小部件傳遞給我的活動這裏是我的:http://stackoverflow.com/questions/39587137/how-to-pass-data-and-open-an-activity -from-widget-android謝謝。 – natsumiyu 2016-10-27 00:25:35