Android上传文件
注: 整理于网络
Android要实现文件上传,可以利用Socket上传,也可以模拟Web进行上传,但是如果是使用第一种方式上传,严格的话就得使用TCP,这样容易生成系统死掉,或者是长时间等待,如果是UDP来传,就容易造成数据丢失,因此在这里选择了Web进行上传,使用Web进行上传是模拟的Http Post上传数据,当然,Post上传数据的类,在网上找了一找,方式虽然很多,但是没有一个感觉是我所使用的,所以参照原理之类的,进行了一下修改,算是做了一个参考。并且利用这个类完成了文件和表彰的上传服务。
上传方法一:
- public void uploadFile(){
- String name=URLEncoder.encode(text1.getText().toString(),"utf-8");
- String pass=URLEncoder.encode(text2.getText().toString(),"utf-8");
- Map<String, String> params = new HashMap<String, String>();
- params.put("NAME", name);
- params.put("PASSWORD", pass);
- post("http://192.168.1.120/dev/index.php/Device/UploadFile?filename=111&filetype=IMAGE", params, upfiles);
- }
- Map<String, File> upfiles = new HashMap<String, File>();
- void getFile() {
- File file = new File("/sdcard/");
- File[] files = file.listFiles(new fileFilter());
- for (File f: files) {
- upfiles.put(f.getName(), new File("/sdcard/"+f.getName()));
- }
- // Toast.makeText(this, filename, Toast.LENGTH_LONG).show();
- }
- class fileFilter implements FilenameFilter {
- @Override
- public boolean accept(File dir, String filename) {
- return filename.endsWith(".mp3");
- }
- }
- // 上传代码,第一个参数,为要使用的URL,第二个参数,为表单内容,第三个参数为要上传的文件,可以上传多个文件,这根据需要页定
- public static boolean post(String actionUrl,Map<String, String> params,Map<String, File> files) throws IOException {
- String BOUNDARY = java.util.UUID.randomUUID().toString();
- String PREFIX = "--", LINEND = "\r\n";
- String MULTIPART_FROM_DATA = "multipart/form-data";
- String CHARSET = "UTF-8";
- URL uri = new URL(actionUrl);
- HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
- conn.setReadTimeout(5 * 1000);
- conn.setDoInput(true);// 允许输入
- conn.setDoOutput(true);// 允许输出
- conn.setUseCaches(false);
- conn.setRequestMethod("POST"); // Post方式
- conn.setRequestProperty("connection", "keep-alive");
- conn.setRequestProperty("Charsert", "UTF-8");
- conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA
- + ";boundary=" + BOUNDARY);
- // 首先组拼文本类型的参数
- StringBuilder sb = new StringBuilder();
- for (Map.Entry<String, String> entry : params.entrySet()) {
- sb.append(PREFIX);
- sb.append(BOUNDARY);
- sb.append(LINEND);
- sb.append("Content-Disposition: form-data; name=\""
- + entry.getKey() + "\"" + LINEND);
- sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
- sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
- sb.append(LINEND);
- sb.append(entry.getValue());
- sb.append(LINEND);
- }
- DataOutputStream outStream = new DataOutputStream(
- conn.getOutputStream());
- outStream.write(sb.toString().getBytes());
- // 发送文件数据
- if (files != null)
- for (Map.Entry<String, File> file : files.entrySet()) {
- StringBuilder sb1 = new StringBuilder();
- sb1.append(PREFIX);
- sb1.append(BOUNDARY);
- sb1.append(LINEND);
- sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""
- + file.getKey() + "\"" + LINEND);
- sb1.append("Content-Type: multipart/form-data; charset="
- + CHARSET + LINEND);
- sb1.append(LINEND);
- outStream.write(sb1.toString().getBytes());
- InputStream is = new FileInputStream(file.getValue());
- byte[] buffer = new byte[1024];
- int len = 0;
- while ((len = is.read(buffer)) != -1) {
- outStream.write(buffer, 0, len);
- }
- is.close();
- outStream.write(LINEND.getBytes());
- }
- // 请求结束标志
- byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
- outStream.write(end_data);
- outStream.flush();
- // 得到响应码
- boolean success = conn.getResponseCode()==200;
- InputStream in = conn.getInputStream();
- InputStreamReader isReader = new InputStreamReader(in);
- BufferedReader bufReader = new BufferedReader(isReader);
- String line = null;
- String data = "getResult=";
- while ((line = bufReader.readLine()) != null)
- data += line;
- outStream.close();
- conn.disconnect();
- return success;
- }
上传方法二;
- final String ENCORDING="UTF-8";
- public boolean upload(String filepath) throws Exception {
- String boundary = "---------------------------7db1c523809b2";//+java.util.UUID.randomUUID().toString();//
- // 分割线
- File file = new File(filepath);
- String fileName=new String("哈哈嗨".getBytes(),"ISO-8859-1");
- // 用来解析主机名和端口
- URL url = new URL("http://192.168.1.120/dev/index.php/Device/UploadFile?filename="+fileName+"&filetype=IMAGE");
- // 用来开启连接
- StringBuilder sb = new StringBuilder();
- // 用来拼装请求
- /*// username字段
- sb.append("--" + boundary + "\r\n");
- sb.append("Content-Disposition: form-data; name=\"username\"" + "\r\n");
- sb.append("\r\n");
- sb.append(username + "\r\n");
- // password字段
- sb.append("--" + boundary + "\r\n");
- sb.append("Content-Disposition: form-data; name=\"password\"" + "\r\n");
- sb.append("\r\n");
- sb.append(password + "\r\n");*/
- // 文件部分
- sb.append("--" + boundary + "\r\n");
- sb.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + filepath + "\"" + "\r\n");
- sb.append("Content-Type: application/octet-stream" + "\r\n");
- sb.append("\r\n");
- // 将开头和结尾部分转为字节数组,因为设置Content-Type时长度是字节长度
- byte[] before = sb.toString().getBytes(ENCORDING);
- byte[] after = ("\r\n--" + boundary + "--\r\n").getBytes(ENCORDING);
- // 打开连接, 设置请求头
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- conn.setConnectTimeout(10000);
- conn.setRequestMethod("POST");
- conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
- conn.setRequestProperty("Content-Length", before.length + file.length() + after.length + "");
- conn.setDoOutput(true);
- conn.setDoInput(true);
- // 获取输入输出流
- OutputStream out = conn.getOutputStream();
- FileInputStream fis = new FileInputStream(file);
- // 将开头部分写出
- out.write(before);
- // 写出文件数据
- byte[] buf = new byte[1024*5];
- int len;
- while ((len = fis.read(buf)) != -1)
- out.write(buf, 0, len);
- // 将结尾部分写出
- out.write(after);
- InputStream in = conn.getInputStream();
- InputStreamReader isReader = new InputStreamReader(in);
- BufferedReader bufReader = new BufferedReader(isReader);
- String line = null;
- String data = "getResult=";
- while ((line = bufReader.readLine()) != null)
- data += line;
- Log.e("fromServer", "result="+data);
- boolean sucess=conn.getResponseCode() == 200;
- in.close();
- fis.close();
- out.close();
- conn.disconnect();
- return sucess;
- }
通过此代码就可以实现将内容保存到SD卡等设备上,当然要使用网络,必须得有网络的访问权限。这个需要自己添加,在这里不再添加!
实例:
本实例实现了android上传手机图片至服务器,服务器进行保存
服务器servlet代码
- publicvoid doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String temp=request.getSession().getServletContext().getRealPath("/")+"temp"; //临时目录
- System.out.println("temp="+temp);
- String loadpath=request.getSession().getServletContext().getRealPath("/")+"Image"; //上传文件存放目录
- System.out.println("loadpath="+loadpath);
- DiskFileUpload fu =new DiskFileUpload();
- fu.setSizeMax(1*1024*1024); // 设置允许用户上传文件大小,单位:字节
- fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:字节
- fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
- //开始读取上传信息
- int index=0;
- List fileItems =null;
- try {
- fileItems = fu.parseRequest(request);
- System.out.println("fileItems="+fileItems);
- } catch (Exception e) {
- e.printStackTrace();
- }
- Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件
- while (iter.hasNext())
- {
- FileItem item = (FileItem)iter.next();// 忽略其他不是文件域的所有表单信息
- if (!item.isFormField())
- {
- String name = item.getName();//获取上传文件名,包括路径
- name=name.substring(name.lastIndexOf("\\")+1);//从全路径中提取文件名
- long size = item.getSize();
- if((name==null||name.equals("")) && size==0)
- continue;
- int point = name.indexOf(".");
- name=(new Date()).getTime()+name.substring(point,name.length())+index;
- index++;
- File fNew=new File(loadpath, name);
- try {
- item.write(fNew);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- else//取出不是文件域的所有表单信息
- {
- String fieldvalue = item.getString();
- //如果包含中文应写为:(转为UTF-8编码)
- //String fieldvalue = new String(item.getString().getBytes(),"UTF-8");
- }
- }
- String text1="11";
- response.sendRedirect("result.jsp?text1="+ text1);
- }
android客户端代码
- public class PhotoUpload extends Activity {
- private String newName ="image.jpg";
- private String uploadFile ="/sdcard/image.JPG";
- private String actionUrl ="http://192.168.0.71:8086/HelloWord/myForm";
- private TextView mText1;
- private TextView mText2;
- private Button mButton;
- @Override
- publicvoid onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.photo_upload);
- mText1 = (TextView) findViewById(R.id.myText2);
- //"文件路径:\n"+
- mText1.setText(uploadFile);
- mText2 = (TextView) findViewById(R.id.myText3);
- //"上传网址:\n"+
- mText2.setText(actionUrl);
- /* 设置mButton的onClick事件处理 */
- mButton = (Button) findViewById(R.id.myButton);
- mButton.setOnClickListener(new View.OnClickListener()
- {
- publicvoid onClick(View v)
- {
- uploadFile();
- }
- });
- }
- /* 上传文件至Server的方法 */
- privatevoid uploadFile()
- {
- String end ="\r\n";
- String twoHyphens ="--";
- String boundary ="*****";
- try
- {
- URL url =new URL(actionUrl);
- HttpURLConnection con=(HttpURLConnection)url.openConnection();
- /* 允许Input、Output,不使用Cache */
- con.setDoInput(true);
- con.setDoOutput(true);
- con.setUseCaches(false);
- /* 设置传送的method=POST */
- con.setRequestMethod("POST");
- /* setRequestProperty */
- con.setRequestProperty("Connection", "Keep-Alive");
- con.setRequestProperty("Charset", "UTF-8");
- con.setRequestProperty("Content-Type",
- "multipart/form-data;boundary="+boundary);
- /* 设置DataOutputStream */
- DataOutputStream ds =
- new DataOutputStream(con.getOutputStream());
- ds.writeBytes(twoHyphens + boundary + end);
- ds.writeBytes("Content-Disposition: form-data; "+
- "name=\"file1\";filename=\""+
- newName +"\""+ end);
- ds.writeBytes(end);
- /* 取得文件的FileInputStream */
- FileInputStream fStream =new FileInputStream(uploadFile);
- /* 设置每次写入1024bytes */
- int bufferSize =1024;
- byte[] buffer =newbyte[bufferSize];
- int length =-1;
- /* 从文件读取数据至缓冲区 */
- while((length = fStream.read(buffer)) !=-1)
- {
- /* 将资料写入DataOutputStream中 */
- ds.write(buffer, 0, length);
- }
- ds.writeBytes(end);
- ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
- /* close streams */
- fStream.close();
- ds.flush();
- /* 取得Response内容 */
- InputStream is = con.getInputStream();
- int ch;
- StringBuffer b =new StringBuffer();
- while( ( ch = is.read() ) !=-1 )
- {
- b.append( (char)ch );
- }
- /* 将Response显示于Dialog */
- showDialog("上传成功"+b.toString().trim());
- /* 关闭DataOutputStream */
- ds.close();
- }
- catch(Exception e)
- {
- showDialog("上传失败"+e);
- }
- }
- /* 显示Dialog的method */
- privatevoid showDialog(String mess)
- {
- new AlertDialog.Builder(PhotoUpload.this).setTitle("Message")
- .setMessage(mess)
- .setNegativeButton("确定",new DialogInterface.OnClickListener()
- {
- publicvoid onClick(DialogInterface dialog, int which)
- {
- }
- })
- .show();
- }
- }
原文出自:http://www.cnblogs.com/gzggyy/archive/2011/08/02/2125237.html
Android中联系人的增删改查
增删改代码
删除
- private void delContact(Context context, String name) {
- Cursor cursor = getContentResolver().query(Data.CONTENT_URI,new String[] { Data.RAW_CONTACT_ID },
- ContactsContract.Contacts.DISPLAY_NAME + "=?",new String[] { name }, null);
- ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
- if (cursor.moveToFirst()) {
- do {
- long Id = cursor.getLong(cursor.getColumnIndex(Data.RAW_CONTACT_ID));
- ops.add(ContentProviderOperation.newDelete(
- ContentUris.withAppendedId(RawContacts.CONTENT_URI,Id)).build());
- try {
- getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
- }
- catch (Exception e){}
- } while (cursor.moveToNext());
- cursor.close();
- }
- }
- <pre name="code" class="html">private void updateContact(Context context,String oldname, String name, String phone, String email,String website, String organization, String note) {
- Cursor cursor = getContentResolver().query(Data.CONTENT_URI,new String[] { Data.RAW_CONTACT_ID },
- ContactsContract.Contacts.DISPLAY_NAME + "=?",new String[] { oldname }, null);
- cursor.moveToFirst();
- String id = cursor.getString(cursor.getColumnIndex(Data.RAW_CONTACT_ID));
- cursor.close();
- ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();</pre><br>
- <br>
- <p></p>
- <pre></pre>
- <pre name="code" class="java">ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(
- Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?" +
- " AND " + Phone.TYPE + "=?",new String[] { String.valueOf(id),Phone.CONTENT_ITEM_TYPE,
- String.valueOf(Phone.TYPE_HOME) }).withValue(Phone.NUMBER, phone).build());
- // 更新email
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?" +" AND " + Email.TYPE + "=?",new String[] { String.valueOf(id),Email.CONTENT_ITEM_TYPE,
- String.valueOf(Email.TYPE_HOME) }).withValue(Email.DATA, email).build());
- // 更新姓名
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),StructuredName.CONTENT_ITEM_TYPE }).withValue(StructuredName.DISPLAY_NAME, name).build());
- // 更新网站
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),Website.CONTENT_ITEM_TYPE }).withValue(Website.URL, website).build());
- // 更新公司
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),Organization.CONTENT_ITEM_TYPE })
- .withValue(Organization.COMPANY, organization).build());
- // 更新note
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),Note.CONTENT_ITEM_TYPE }).withValue(Note.NOTE, note).build());
- try{
- getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
- } catch (Exception e) {
- }
- }</pre><br>
- <br>
- <p></p>
- <p>添加</p>
- <p></p><pre name="code" class="java">private void addContact(Context context, String name,
- String organisation,String phone, String fax, String email, String address,String website,String nickname){
- ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
- //在名片表插入一个新名片
- ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
- .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null).withValue(ContactsContract.RawContacts._ID, 0).withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).withValue(
- ContactsContract.RawContacts.AGGREGATION_MODE,ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED).build());
- // add name
- //添加一条新名字记录;对应RAW_CONTACT_ID为0的名片
- if (!name.equals("")) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
- ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE).withValue(
- ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,name).build());
- }
- //添加昵称</pre><pre name="code" class="java">if(!nickname.equals("")){
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
- ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Nickname.NAME,nickname).build());</pre><pre name="code" class="java">}
- // add company
- if (!organisation.equals("")) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(ContactsContract.Data.MIMETYPE,
- ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE).withValue(
- ContactsContract.CommonDataKinds.Organization.COMPANY,organisation).withValue(
- ContactsContract.CommonDataKinds.Organization.TYPE,ContactsContract.CommonDataKinds.Organization.TYPE_WORK).build());
- }
- // add phone
- if (!phone.equals("")) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.MIMETYPE,
- ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,phone).withValue(ContactsContract.CommonDataKinds.Phone.TYPE,1).build());
- }
- // add Fax 传真,一般不用了
- if (!fax.equals("")) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(
- ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
- ContactsContract.Data.MIMETYPE,
- ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE).withValue(
- ContactsContract.CommonDataKinds.Phone.NUMBER,fax)
- .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
- ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK).build());
- }
- // add email
- if (!email.equals("")) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(
- ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
- ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Email.DATA,email).withValue(ContactsContract.CommonDataKinds.Email.TYPE,1).build());
- }
- // add address
- if (!address.equals("")) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
- ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE).withValue(
- ContactsContract.CommonDataKinds.StructuredPostal.STREET,address)
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE,
- ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK).build());
- }
- // add website
- if (!website.equals("")) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.MIMETYPE,
- ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE).withValue(
- ContactsContract.CommonDataKinds.Website.URL,website)
- .withValue(
- ContactsContract.CommonDataKinds.Website.TYPE,
- ContactsContract.CommonDataKinds.Website.TYPE_WORK).build());
- }
- // add IM</pre><pre code_snippet_id="175156" snippet_file_name="blog_20140130_8_3020566" name="code" class="java">if(!im.equals("")){
- //String qq="459255045"; for test
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(
- ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
- ContactsContract.Data.MIMETYPE,
- ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE).withValue(
- ContactsContract.CommonDataKinds.Im.DATA1,im)
- .withValue(
- ContactsContract.CommonDataKinds.Im.PROTOCOL,
- ContactsContract.CommonDataKinds.Im.PROTOCOL_QQ).build());
- }
- try {
- context.getContentResolver().applyBatch(
- ContactsContract.AUTHORITY, ops);
- } catch (Exception e){
- }
- }</pre><p></p>
- <p><br>
- </p>
- 最后功能可以实现了,我只要添加功能。
- <p>但是很奇怪只能添加一次,所以又要修改,最后找到原因</p>
- <p></p><pre code_snippet_id="175156" snippet_file_name="blog_20140130_9_849785" name="code" class="java">// 在名片表插入一个新名片
- ops.add(ContentProviderOperation
- .newInsert(ContactsContract.RawContacts.CONTENT_URI)
- .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
- <span style="color:#ff0000;">.withValue(ContactsContract.RawContacts._ID, 0)</span>
- .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
- .withValue(ContactsContract.RawContacts.AGGREGATION_MODE,
- ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED)
- .build());
- 把上面代码的 红色部分去掉即可</pre><br>
- <br>
- <p></p>
- <p>这是在一个android论坛找到的资料。</p>
- <p>原文地址:<a target="_blank" href="http://www.eoeandroid.com/thread-99617-1-1.html">http://www.eoeandroid.com/thread-99617-1-1.html</a><br>
- <br>
- <br>
- </p>
- <p><br>
- </p>