Я создал виджет Android.
У меня проблема с получением результата от действия обратно к его родителю AppWidgetProvider.
Я искал ответ в Интернете, сделал именно то, что написано на всех сайтах, и он не работает.
Я поставил точку останова в методе onReceive, и он даже не вошел туда.
Если кто-то может мне помочь, я буду очень рад.
Прикреплен мой код для AppWidgetProvider и действия с именем ContactsActivity.
Прилагается также в файле манифеста.
AppWidgetProvider:
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i=0; i < N; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
Intent informationButtonIntent = new Intent(context, InfoActivity.class);
informationButtonIntent.setAction(INFO_BUTTON_PRESSED);
PendingIntent infoPendingIntent = PendingIntent.getActivity(context, 0, informationButtonIntent, 0);
Intent contactButtonIntent = new Intent(context, ContactsActivity.class);
contactButtonIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
contactButtonIntent.setAction(CONTACT_BUTTON_PRESSED);
PendingIntent contactPendingIntent = PendingIntent.getActivity(context, 0, contactButtonIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Intent freeNumberButtonIntent = new Intent(context, FreeSMSNumberActivity.class);
contactButtonIntent.setAction(FREE_NUMBER_BUTTON_PRESSED);
PendingIntent freeNumberPendingIntent = PendingIntent.getActivity(context, 0, freeNumberButtonIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.informationButton, infoPendingIntent);
remoteViews.setOnClickPendingIntent(R.id.contactsButton, contactPendingIntent);
remoteViews.setOnClickPendingIntent(R.id.freeTextButton, freeNumberPendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
}
public void onReceive(Context context, Intent intent) {
// v1.5 fix that doesn't call onDelete Action
final String action = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
final int appWidgetId = intent.getExtras().getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
this.onDeleted(context, new int[] { appWidgetId });
}
}
else if (intent.getAction().equals("CONTACT_BUTTON_PRESSED")) {
}
super.onReceive(context, intent);
}
}
ContactsActivity:
public class ContactsActivity extends Activity {
private static final int PICK_CONTACT = 3;
int mAppWidgetId;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(UndisclosedSMS.TAG_LOGGER, "Contacts button was pressed");
Intent parentIntent = getIntent();
Bundle extras = parentIntent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
requestWindowFeature(Window.FEATURE_NO_TITLE);
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
}
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data){
super.onActivityResult(reqCode, resultCode, data);
switch(reqCode){
case (PICK_CONTACT):
if (resultCode == Activity.RESULT_OK){
}
else {
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_CANCELED, resultValue);
finish();
}
finish();
}
}
finish();
}
}
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.LogiaGroup.UndisclosedSMS"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name" >
<receiver android:name=".UndisclosedSMS" >
<intent-filter >
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/undisclose_sms_info" />
</receiver>
<activity android:name=".InfoActivity" >
<intent-filter >
<action android:name="com.LogiaGroup.UndisclosedSMS.INFO_BUTTON_PRESSED" />
</intent-filter>
</activity>
<activity android:name=".ContactsActivity" >
<intent-filter >
<action android:name="com.LogiaGroup.UndisclosedSMS.CONTACT_BUTTON_PRESSED" />
</intent-filter>
</activity>
<activity android:name=".FreeSMSNumberActivity" android:theme="@android:style/Theme.Dialog"
android:windowSoftInputMode="stateVisible|adjustResize">
<intent-filter >
<action android:name="com.LogiaGroup.UndisclosedSMS.FREE_NUMBER_BUTTON_PRESSED" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
</manifest>
Большое спасибо!