открыть действие для редактирования контакта в адаптере синхронизации - PullRequest
0 голосов
/ 01 декабря 2011

В Android SampleSyncAdapter есть следующий фрагмент кода:

/**
 * Adds a profile action
 *
 * @param userId the userId of the sample SyncAdapter user object
 * @return instance of ContactOperations
 */
public ContactOperations addProfileAction(long userId) {
    mValues.clear();
    if (userId != 0) {
        mValues.put(SampleSyncAdapterColumns.DATA_PID, userId);
        mValues.put(SampleSyncAdapterColumns.DATA_SUMMARY, mContext
            .getString(R.string.syncadapter_profile_action));
        mValues.put(SampleSyncAdapterColumns.DATA_DETAIL, mContext
            .getString(R.string.view_profile));
        mValues.put(Data.MIMETYPE, SampleSyncAdapterColumns.MIME_PROFILE);
        addInsertOp();
    }
    return this;
}

Я добавил это как фильтр для своей активности

    <intent-filter>
        <action android:name="@string/syncadapter_profile_action" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="vnd.android.cursor.item/vnd.myapp.profile"
            android:host="contacts" />
     </intent-filter>  

, где SampleSyncAdapterColumns.MIME_PROFILE = vnd.android.cursor.item / vnd.myapp.profile

Я добавил контакт, и я вижу запись, но когда я нажимаю на нее, ничего не происходит.Что я должен сделать, чтобы начать действие, когда пользователь нажимает на него?Я пытался сделать то, что предлагается Здесь для устройств с предварительным сотовым заполнением: Хитрость заключается в том, чтобы вставить строку данных «Редактировать в MyApp», которая приведет пользователя к вашему приложению и вашему приложению.затем предоставит редактору активность

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Это то, что я сделал.В файле манифеста я добавил эти фильтры намерений для одного из моих действий

<intent-filter >
    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />

    <data android:mimeType="vnd.android.cursor.item/vnd.myapp.profile" />
</intent-filter>

<intent-filter >
    <action android:name="android.intent.action.EDIT" />

    <category android:name="android.intent.category.DEFAULT" />

    <data
        android:host="contacts"
        android:mimeType="vnd.android.cursor.item/person" />
    <data
        android:host="com.android.contacts"
        android:mimeType="vnd.android.cursor.item/contact" />
    <data
        android:host="com.android.contacts"
        android:mimeType="vnd.android.cursor.item/raw_contact" />
</intent-filter>            

Первый будет транслироваться, когда пользователь нажимает на действие профиля, которое я добавил в свои учетные записи адаптера синхронизации, используя код впример адаптера синхронизации (см. выше)

Второй позволяет вам обрабатывать намерение, которое передается родной адресной книгой, когда пользователь хочет редактировать контакт.Учтите, что в первом случае, поскольку mimetype - это один из ваших syncadapter, ваша деятельность будет вызываться напрямую.Во втором случае будет показан диалог со списком приложений, зарегистрированных для обработки android.intent.action.EDIT для android: mimeType = "vnd.android.cursor.item / person", android: mimeType = "vnd.android.cursor.item / contact "etc

В своей деятельности у меня есть такой метод:

boolean handleIntent(Intent intent) {
    String action = intent.getAction();

    Uri uri = intent.getData();
    if (action.equalsIgnoreCase(Intent.ACTION_VIEW)) {
        handleProfileAction(uri);  // in this case uri points to ProfileAction Data raw that is one of the Data that your sync adaoter has added in the raw contact 
    } else if (action.equalsIgnoreCase(Intent.ACTION_EDIT)) {
        editYourContact(uri); // in this case the uri points to the Contact containing you raw contact although at least on SonuEricsson  Xperia mini when this intent is broadcasted by the context menu "edit contact" command I receive the URI of the raw contact when there is only one.
    }
    return true;
}
1 голос
/ 06 декабря 2011

Я думаю, что ваш фильтр намерений может быть неправильным. Согласно этой записи правильное действие и элементы данных должны выглядеть примерно так:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="vnd.android.cursor.item/vnd.myapp.profile" />
</intent-filter>
...