在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
我添加了一个联系人,我可以看到该条目但是当我点击它时没有任何反应。当用户点击它时,我该怎么做才能开始活动? 我试图对蜂窝前设备做出Here的建议:诀窍是插入一个数据行,“在MyApp中编辑”,这会将用户带到您的应用和您的应用 然后会提供编辑活动
答案 0 :(得分:1)
我认为您的意图过滤器可能不正确。根据{{3}},正确的操作和数据项应如下所示:
<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>
答案 1 :(得分:1)
这就是我所做的。 在清单文件中,我为我的一个活动添加了这些意图过滤器
<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的android.intent.action.EDIT:mimeType =“vnd.android.cursor.item / person”,android:mimeType =“vnd.android .cursor.item /联系“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;
}