Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 联系API编辑组_Android_Contacts_Android Contacts - Fatal编程技术网

Android 联系API编辑组

Android 联系API编辑组,android,contacts,android-contacts,Android,Contacts,Android Contacts,我正在尝试编辑组标题和注释 编辑标题适用于系统组和用户创建的组 虽然notes列仅在它是系统组(例如“联系人”、“朋友”、“家人”、“同事”)时才会保留, 我假设它要么不为用户创建的组保存注释,要么在注释列中被标题列内容覆盖 如何在联系人组中使用备注栏?是否有其他方法可以存储组中的其他信息? 以下是我的代码片段: ArrayList<ContentProviderOperation> ops =new ArrayList<ContentProviderOperatio

我正在尝试编辑组标题和注释

编辑标题适用于系统组和用户创建的组

虽然notes列仅在它是系统组(例如“联系人”、“朋友”、“家人”、“同事”)时才会保留, 我假设它要么不为用户创建的组保存注释,要么在注释列中被标题列内容覆盖

如何在联系人组中使用备注栏?是否有其他方法可以存储组中的其他信息? 以下是我的代码片段:

     ArrayList<ContentProviderOperation> ops =new ArrayList<ContentProviderOperation>();

                ContentProviderOperation.Builder op = 
     ContentProviderOperation.newUpdate(ContactsContract.Groups.CONTENT_URI)
                    .withSelection(ContactsContract.Groups._ID + "="+group.getId(), null)
                    .withValue(ContactsContract.Groups.TITLE, group.getTitle());

                HashMap<String, String> notes = group.getNotes();
                if(notes!=null && notes.size()>0){
                    op = op.withValue(ContactsContract.Groups.NOTES, new Gson().toJson(group.getNotes()));
                }

                ops.add(op.build());
                try {
                    getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
                } catch (RemoteException e) {
                    e.printStackTrace();
                } catch (OperationApplicationException e) {
                    e.printStackTrace();
                }
ArrayList ops=new ArrayList();
ContentProviderOperation.Builder操作=
ContentProviderOperation.newUpdate(ContactsContract.Groups.CONTENT\u URI)
.with selection(contacts contract.Groups.\u ID+“=”+group.getId(),null)
.withValue(contacts contract.Groups.TITLE,group.getTitle());
HashMap notes=group.getNotes();
if(notes!=null&¬es.size()>0){
op=op.withValue(ContactsContract.Groups.NOTES,new Gson().toJson(group.getNotes());
}
ops.add(op.build());
试一试{
getContentResolver().applyBatch(contacts contract.AUTHORITY,ops);
}捕获(远程异常){
e、 printStackTrace();
}捕获(操作应用程序异常e){
e、 printStackTrace();
}
该字段是一个字符串,看起来您正试图为其设置一个
JSON
对象

检查这是否适用于您:

if (notes!=null && notes.size()>0) {
    op = op.withValue(ContactsContract.Groups.NOTES, "TEST STRING!");
}

如果是这样,您需要从
JSON
对象中提取实际需要的字符串,这取决于
JSON

的格式。希望此解决方案对您有效,似乎对我有效

我已经用过这个方法了

我假设它要么不为用户创建的组保存注释,要么在注释列中被标题列内容覆盖

我能够使用下面的代码更新用户创建的组的注释

如何在联系人组中使用备注栏

您可以使用notes列保存任何文本值,因为它是在sqlite中定义的文本类型。看

(在谷歌Pixel XL、Oreo 8.0.0上测试)

public类MainActivity扩展了AppCompatActivity{
私有游标mCursor;
专用SimpleCursorAdapter适配器;
私有列表视图组;
@凌驾
受保护的空onDestroy(){
if(mCursor!=null)
mCursor.close();
super.ondestory();
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvGroups=findviewbyd(R.id.lvGroups);
checkAndRequestPermission();
}
私人无效支票和请求许可证(){
if(PermissionChecker.checkSelfPermission(此,Manifest.permission.READ\u CONTACTS)==PermissionChecker.permission\u已授予){
加载组();
}否则{
ActivityCompat.requestPermissions(这个新字符串[]{Manifest.permission.READ_CONTACTS,Manifest.permission.WRITE_CONTACTS},123);
}
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
布尔值=真;
对于(int i=0;i
FYKI new Gson().toJson(group.getNotes())返回一个字符串。感谢mate的努力,但它给出了完全相同的行为,无论您使用update()或applybatch(),此外,我注意到它是随机的,对于某些组,它保留值,而对于其他组,它只是重置,也不同步no
    public class MainActivity extends AppCompatActivity {

    private Cursor mCursor;
    private SimpleCursorAdapter adapter;
    private ListView lvGroups;

    @Override
    protected void onDestroy() {
        if (mCursor != null)
            mCursor.close();
        super.onDestroy();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lvGroups = findViewById(R.id.lvGroups);
        checkAndRequestPermission();

    }

    private void checkAndRequestPermission() {
        if (PermissionChecker.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) == PermissionChecker.PERMISSION_GRANTED) {
            loadGroups();
        } else {
            ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS}, 123);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        boolean isGranted = true;
        for (int i = 0; i < grantResults.length; i++) {
            if (grantResults[i] == PermissionChecker.PERMISSION_DENIED)
                isGranted = false;
        }
        if (isGranted)
            loadGroups();
        else
            ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS},123);
    }

    private void loadGroups() {
        mCursor = getContentResolver().query(ContactsContract.Groups.CONTENT_URI,null,ContactsContract.Groups.GROUP_IS_READ_ONLY + " = 0",null, ContactsContract.Groups.TITLE);

        adapter = new SimpleCursorAdapter(this, R.layout.contact_group_item, mCursor, new String[] {
                ContactsContract.Groups.TITLE,
                ContactsContract.Groups._ID,
                ContactsContract.Groups.ACCOUNT_NAME,
                ContactsContract.Groups.ACCOUNT_TYPE,
                ContactsContract.Groups.AUTO_ADD,
                ContactsContract.Groups.GROUP_IS_READ_ONLY,
                ContactsContract.Groups.GROUP_VISIBLE,
                ContactsContract.Groups.SOURCE_ID,
                ContactsContract.Groups.NOTES},
                new int[] {
                        R.id.text1,
                        R.id.text2,R.id.text3, R.id.text4, R.id.text5, R.id.text6, R.id.text7, R.id.text8, R.id.text9}, SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

        lvGroups.setAdapter(adapter);

        lvGroups.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Cursor cursor = adapter.getCursor();
                cursor.moveToPosition(position);

                int groupId = cursor.getInt(cursor.getColumnIndex(ContactsContract.Groups._ID));
                ContentValues contentValues = new ContentValues();
                contentValues.put(ContactsContract.Groups.NOTES,"My test Notes");
                getContentResolver().update(ContactsContract.Groups.CONTENT_URI, contentValues, ContactsContract.Groups._ID + " = " + groupId, null);
                adapter.notifyDataSetChanged();
            }
        });

    }
}