我使用developers.android.com中的代码创建联系人
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = ops.size();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, accountType)
.withValue(RawContacts.ACCOUNT_NAME, accountName)
.build());
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.DISPLAY_NAME, "Mike Sullivan")
.build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
从Activity完成后它运行良好,但我想从一个扩展AsyncTask的类中完成它。我做了一些研究并最终得出结论,我需要以某种方式传递上下文(因为简单的getActivity()不起作用),所以我可以使用context.getContentResolver()。applyBatch(ContactsContract.AUTHORITY,ops); 但遗憾的是不知道如何在我的情况下这样做
答案 0 :(得分:0)
这是将Context传递给AsyncTask类的方法:
片段中的 new CreateContact().execute(getActivity());
或活动new CreateContact().execute(getApplicationContext());
public class CreateContact extends AsyncTask<Context, Void, Void> {
Context mContext;
@Override
protected void onPreExecute() {
super.onPreExecute();}
@Override
protected Void doInBackground(Context... param) {
mContext=param[0];
try {
//your code.....
mContext.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
}
} catch (Exception e) {
e.printStackTrace();}
return null;
}
protected void onPostExecute(Void res) {
//your code.....
}
}
或者您可以将上下文传递给构造