Android上传文件与联系人的增删改查示例

本文介绍两种Android文件上传方法及其实现细节,并提供一个完整的上传图片至服务器的示例。此外,还展示了如何在Android中实现联系人的增删改查功能。

Android上传文件

注: 整理于网络

Android要实现文件上传,可以利用Socket上传,也可以模拟Web进行上传,但是如果是使用第一种方式上传,严格的话就得使用TCP,这样容易生成系统死掉,或者是长时间等待,如果是UDP来传,就容易造成数据丢失,因此在这里选择了Web进行上传,使用Web进行上传是模拟的Http Post上传数据,当然,Post上传数据的类,在网上找了一找,方式虽然很多,但是没有一个感觉是我所使用的,所以参照原理之类的,进行了一下修改,算是做了一个参考。并且利用这个类完成了文件和表彰的上传服务。

上传方法一:

[java]  view plain copy
  1. public void uploadFile(){  
  2.          String name=URLEncoder.encode(text1.getText().toString(),"utf-8");    
  3.          String pass=URLEncoder.encode(text2.getText().toString(),"utf-8");   
  4.          Map<String, String> params = new HashMap<String, String>();         
  5.          params.put("NAME", name);     
  6.          params.put("PASSWORD", pass);  
  7.            
  8.         post("http://192.168.1.120/dev/index.php/Device/UploadFile?filename=111&filetype=IMAGE", params, upfiles);  
  9.     }  
  10.       
  11.     Map<String, File> upfiles = new HashMap<String, File>();     
  12.       
  13.     void getFile() {           
  14.         File file = new File("/sdcard/");      
  15.         File[] files = file.listFiles(new fileFilter());       
  16.           
  17.         for (File f: files) {         
  18.              upfiles.put(f.getName(), new File("/sdcard/"+f.getName()));  
  19.                  
  20.         }            
  21.          //  Toast.makeText(this, filename, Toast.LENGTH_LONG).show();     
  22.               
  23.         }       
  24.       
  25.     class fileFilter implements FilenameFilter {      
  26.         @Override            
  27.         public boolean accept(File dir, String filename) {     
  28.             return filename.endsWith(".mp3");      
  29.          }       
  30.      }    
  31.       
  32.      // 上传代码,第一个参数,为要使用的URL,第二个参数,为表单内容,第三个参数为要上传的文件,可以上传多个文件,这根据需要页定    
  33.     public static boolean post(String actionUrl,Map<String, String> params,Map<String, File> files) throws IOException {    
  34.           
  35.         String BOUNDARY = java.util.UUID.randomUUID().toString();    
  36.         String PREFIX = "--", LINEND = "\r\n";    
  37.         String MULTIPART_FROM_DATA = "multipart/form-data";    
  38.         String CHARSET = "UTF-8";    
  39.         URL uri = new URL(actionUrl);    
  40.         HttpURLConnection conn = (HttpURLConnection) uri.openConnection();    
  41.         conn.setReadTimeout(5 * 1000);    
  42.         conn.setDoInput(true);// 允许输入    
  43.         conn.setDoOutput(true);// 允许输出    
  44.         conn.setUseCaches(false);    
  45.         conn.setRequestMethod("POST"); // Post方式    
  46.         conn.setRequestProperty("connection""keep-alive");    
  47.         conn.setRequestProperty("Charsert""UTF-8");    
  48.         conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA    
  49.                 + ";boundary=" + BOUNDARY);    
  50.         // 首先组拼文本类型的参数    
  51.         StringBuilder sb = new StringBuilder();    
  52.         for (Map.Entry<String, String> entry : params.entrySet()) {    
  53.             sb.append(PREFIX);    
  54.             sb.append(BOUNDARY);    
  55.             sb.append(LINEND);    
  56.             sb.append("Content-Disposition: form-data; name=\""    
  57.                     + entry.getKey() + "\"" + LINEND);    
  58.             sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);    
  59.             sb.append("Content-Transfer-Encoding: 8bit" + LINEND);    
  60.             sb.append(LINEND);    
  61.             sb.append(entry.getValue());    
  62.             sb.append(LINEND);    
  63.         }    
  64.         DataOutputStream outStream = new DataOutputStream(    
  65.                 conn.getOutputStream());    
  66.         outStream.write(sb.toString().getBytes());    
  67.         // 发送文件数据    
  68.         if (files != null)    
  69.             for (Map.Entry<String, File> file : files.entrySet()) {    
  70.                 StringBuilder sb1 = new StringBuilder();    
  71.                 sb1.append(PREFIX);    
  72.                 sb1.append(BOUNDARY);    
  73.                 sb1.append(LINEND);    
  74.                 sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""    
  75.                         + file.getKey() + "\"" + LINEND);    
  76.                 sb1.append("Content-Type: multipart/form-data; charset="    
  77.                         + CHARSET + LINEND);    
  78.                 sb1.append(LINEND);    
  79.                 outStream.write(sb1.toString().getBytes());    
  80.                 InputStream is = new FileInputStream(file.getValue());    
  81.                 byte[] buffer = new byte[1024];    
  82.                 int len = 0;    
  83.                 while ((len = is.read(buffer)) != -1) {    
  84.                     outStream.write(buffer, 0, len);    
  85.                 }    
  86.                 is.close();    
  87.                 outStream.write(LINEND.getBytes());    
  88.             }    
  89.         // 请求结束标志    
  90.         byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();    
  91.         outStream.write(end_data);    
  92.         outStream.flush();    
  93.         // 得到响应码    
  94.         boolean success = conn.getResponseCode()==200;    
  95.         InputStream in = conn.getInputStream();    
  96.         InputStreamReader isReader = new InputStreamReader(in);    
  97.         BufferedReader bufReader = new BufferedReader(isReader);    
  98.         String line = null;    
  99.         String data = "getResult=";    
  100.         while ((line = bufReader.readLine()) != null)    
  101.             data += line;    
  102.           
  103.         outStream.close();    
  104.         conn.disconnect();    
  105.         return success;    
  106.     }    

上传方法二;

[java]  view plain copy
  1. final String ENCORDING="UTF-8";  
  2.     public boolean upload(String filepath) throws Exception {  
  3.         String boundary = "---------------------------7db1c523809b2";//+java.util.UUID.randomUUID().toString();//  
  4.         // 分割线  
  5.         File file = new File(filepath);  
  6.           
  7.         String fileName=new String("哈哈嗨".getBytes(),"ISO-8859-1");  
  8.         // 用来解析主机名和端口  
  9.         URL url = new URL("http://192.168.1.120/dev/index.php/Device/UploadFile?filename="+fileName+"&filetype=IMAGE");  
  10.         // 用来开启连接   
  11.         StringBuilder sb = new StringBuilder();  
  12.         // 用来拼装请求  
  13.   
  14.         /*// username字段 
  15.         sb.append("--" + boundary + "\r\n"); 
  16.         sb.append("Content-Disposition: form-data; name=\"username\"" + "\r\n"); 
  17.         sb.append("\r\n"); 
  18.         sb.append(username + "\r\n"); 
  19.  
  20.         // password字段 
  21.         sb.append("--" + boundary + "\r\n"); 
  22.         sb.append("Content-Disposition: form-data; name=\"password\"" + "\r\n"); 
  23.         sb.append("\r\n"); 
  24.         sb.append(password + "\r\n");*/  
  25.           
  26.         // 文件部分  
  27.         sb.append("--" + boundary + "\r\n");  
  28.         sb.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + filepath + "\"" + "\r\n");  
  29.         sb.append("Content-Type: application/octet-stream" + "\r\n");  
  30.         sb.append("\r\n");  
  31.   
  32.         // 将开头和结尾部分转为字节数组,因为设置Content-Type时长度是字节长度  
  33.         byte[] before = sb.toString().getBytes(ENCORDING);  
  34.         byte[] after = ("\r\n--" + boundary + "--\r\n").getBytes(ENCORDING);  
  35.   
  36.         // 打开连接, 设置请求头  
  37.         HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  38.         conn.setConnectTimeout(10000);  
  39.         conn.setRequestMethod("POST");  
  40.         conn.setRequestProperty("Content-Type""multipart/form-data; boundary=" + boundary);  
  41.         conn.setRequestProperty("Content-Length", before.length + file.length() + after.length + "");  
  42.       
  43.         conn.setDoOutput(true);  
  44.         conn.setDoInput(true);  
  45.   
  46.         // 获取输入输出流  
  47.         OutputStream out = conn.getOutputStream();  
  48.         FileInputStream fis = new FileInputStream(file);  
  49.         // 将开头部分写出  
  50.         out.write(before);  
  51.   
  52.         // 写出文件数据  
  53.         byte[] buf = new byte[1024*5];  
  54.         int len;  
  55.         while ((len = fis.read(buf)) != -1)  
  56.         out.write(buf, 0, len);  
  57.   
  58.         // 将结尾部分写出  
  59.         out.write(after);  
  60.           
  61.          InputStream in = conn.getInputStream();    
  62.          InputStreamReader isReader = new InputStreamReader(in);    
  63.          BufferedReader bufReader = new BufferedReader(isReader);    
  64.             String line = null;    
  65.             String data = "getResult=";    
  66.             while ((line = bufReader.readLine()) != null)    
  67.                 data += line;       
  68.             Log.e("fromServer""result="+data);  
  69.             boolean sucess=conn.getResponseCode() == 200;  
  70.             in.close();  
  71.             fis.close();  
  72.             out.close();  
  73.             conn.disconnect();  
  74.               
  75.             return sucess;    
  76.         }  
  77.       


通过此代码就可以实现将内容保存到SD卡等设备上,当然要使用网络,必须得有网络的访问权限。这个需要自己添加,在这里不再添加!


实例:

本实例实现了android上传手机图片至服务器,服务器进行保存 

服务器servlet代码 

Java代码   收藏代码
  1. publicvoid doPost(HttpServletRequest request, HttpServletResponse response)    
  2.            throws ServletException, IOException {    
  3.               
  4.            String temp=request.getSession().getServletContext().getRealPath("/")+"temp";   //临时目录  
  5.            System.out.println("temp="+temp);  
  6.            String loadpath=request.getSession().getServletContext().getRealPath("/")+"Image"//上传文件存放目录  
  7.            System.out.println("loadpath="+loadpath);  
  8.            DiskFileUpload fu =new DiskFileUpload();  
  9.            fu.setSizeMax(1*1024*1024);   // 设置允许用户上传文件大小,单位:字节  
  10.            fu.setSizeThreshold(4096);   // 设置最多只允许在内存中存储的数据,单位:字节  
  11.            fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录  
  12.             
  13.            //开始读取上传信息  
  14. int index=0;  
  15.            List fileItems =null;  
  16.                   
  17.                           
  18.                                 try {  
  19.                                         fileItems = fu.parseRequest(request);  
  20.                                          System.out.println("fileItems="+fileItems);  
  21.                                 } catch (Exception e) {  
  22.                                         e.printStackTrace();  
  23.                                 }  
  24.                           
  25.                   
  26.            Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件  
  27. while (iter.hasNext())  
  28.            {  
  29.                FileItem item = (FileItem)iter.next();// 忽略其他不是文件域的所有表单信息  
  30. if (!item.isFormField())  
  31.                {  
  32.                    String name = item.getName();//获取上传文件名,包括路径  
  33.                    name=name.substring(name.lastIndexOf("\\")+1);//从全路径中提取文件名  
  34. long size = item.getSize();  
  35.                    if((name==null||name.equals("")) && size==0)  
  36.                          continue;  
  37.                    int point = name.indexOf(".");  
  38.                    name=(new Date()).getTime()+name.substring(point,name.length())+index;  
  39.                    index++;  
  40.                    File fNew=new File(loadpath, name);  
  41.                    try {  
  42.                                         item.write(fNew);  
  43.                                 } catch (Exception e) {  
  44.                                         // TODO Auto-generated catch block  
  45.                                         e.printStackTrace();  
  46.                                 }  
  47.                     
  48.                     
  49.                }  
  50.                else//取出不是文件域的所有表单信息  
  51.                {  
  52.                    String fieldvalue = item.getString();  
  53.             //如果包含中文应写为:(转为UTF-8编码)  
  54.                    //String fieldvalue = new String(item.getString().getBytes(),"UTF-8");  
  55.                }  
  56.            }  
  57.            String text1="11";  
  58.            response.sendRedirect("result.jsp?text1="+ text1);  
  59.     }    

android客户端代码  
Java代码   收藏代码
  1. public class PhotoUpload extends Activity {  
  2.     private String newName ="image.jpg";  
  3.     private String uploadFile ="/sdcard/image.JPG";  
  4.     private String actionUrl ="http://192.168.0.71:8086/HelloWord/myForm";  
  5.     private TextView mText1;  
  6.     private TextView mText2;  
  7.     private Button mButton;  
  8.     @Override  
  9.       publicvoid onCreate(Bundle savedInstanceState)  
  10.       {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.photo_upload);  
  13.         mText1 = (TextView) findViewById(R.id.myText2);  
  14.         //"文件路径:\n"+  
  15.         mText1.setText(uploadFile);  
  16.         mText2 = (TextView) findViewById(R.id.myText3);  
  17.         //"上传网址:\n"+  
  18.         mText2.setText(actionUrl);  
  19.         /* 设置mButton的onClick事件处理 */      
  20.         mButton = (Button) findViewById(R.id.myButton);  
  21.         mButton.setOnClickListener(new View.OnClickListener()  
  22.         {  
  23.           publicvoid onClick(View v)  
  24.           {  
  25.             uploadFile();  
  26.           }  
  27.         });  
  28.       }  
  29.       /* 上传文件至Server的方法 */  
  30.       privatevoid uploadFile()  
  31.       {  
  32.         String end ="\r\n";  
  33.         String twoHyphens ="--";  
  34.         String boundary ="*****";  
  35.         try  
  36.         {  
  37.           URL url =new URL(actionUrl);  
  38.           HttpURLConnection con=(HttpURLConnection)url.openConnection();  
  39.           /* 允许Input、Output,不使用Cache */  
  40.           con.setDoInput(true);  
  41.           con.setDoOutput(true);  
  42.           con.setUseCaches(false);  
  43.           /* 设置传送的method=POST */  
  44.           con.setRequestMethod("POST");  
  45.           /* setRequestProperty */  
  46.           con.setRequestProperty("Connection""Keep-Alive");  
  47.           con.setRequestProperty("Charset""UTF-8");  
  48.           con.setRequestProperty("Content-Type",  
  49.                              "multipart/form-data;boundary="+boundary);  
  50.           /* 设置DataOutputStream */  
  51.           DataOutputStream ds =  
  52.             new DataOutputStream(con.getOutputStream());  
  53.           ds.writeBytes(twoHyphens + boundary + end);  
  54.           ds.writeBytes("Content-Disposition: form-data; "+  
  55.                         "name=\"file1\";filename=\""+  
  56.                         newName +"\""+ end);  
  57.           ds.writeBytes(end);    
  58.           /* 取得文件的FileInputStream */  
  59.           FileInputStream fStream =new FileInputStream(uploadFile);  
  60.           /* 设置每次写入1024bytes */  
  61.           int bufferSize =1024;  
  62.           byte[] buffer =newbyte[bufferSize];  
  63.           int length =-1;  
  64.           /* 从文件读取数据至缓冲区 */  
  65.           while((length = fStream.read(buffer)) !=-1)  
  66.           {  
  67.             /* 将资料写入DataOutputStream中 */  
  68.             ds.write(buffer, 0, length);  
  69.           }  
  70.           ds.writeBytes(end);  
  71.           ds.writeBytes(twoHyphens + boundary + twoHyphens + end);  
  72.           /* close streams */  
  73.           fStream.close();  
  74.           ds.flush();  
  75.           /* 取得Response内容 */  
  76.           InputStream is = con.getInputStream();  
  77.           int ch;  
  78.           StringBuffer b =new StringBuffer();  
  79.           while( ( ch = is.read() ) !=-1 )  
  80.           {  
  81.             b.append( (char)ch );  
  82.           }  
  83.           /* 将Response显示于Dialog */  
  84.           showDialog("上传成功"+b.toString().trim());  
  85.           /* 关闭DataOutputStream */  
  86.           ds.close();  
  87.         }  
  88.         catch(Exception e)  
  89.         {  
  90.           showDialog("上传失败"+e);  
  91.         }  
  92.       }  
  93.       /* 显示Dialog的method */  
  94.       privatevoid showDialog(String mess)  
  95.       {  
  96.         new AlertDialog.Builder(PhotoUpload.this).setTitle("Message")  
  97.          .setMessage(mess)  
  98.          .setNegativeButton("确定",new DialogInterface.OnClickListener()  
  99.          {  
  100.            publicvoid onClick(DialogInterface dialog, int which)  
  101.            {            
  102.            }  
  103.          })  
  104.          .show();  
  105.       }  
  106.     }  


原文出自:http://www.cnblogs.com/gzggyy/archive/2011/08/02/2125237.html 


Android中联系人的增删改查


增删改代码

删除

[java]  view plain copy
  1. private void delContact(Context context, String name) {  
  2.   
  3. Cursor cursor = getContentResolver().query(Data.CONTENT_URI,new String[] { Data.RAW_CONTACT_ID },  
  4.   
  5. ContactsContract.Contacts.DISPLAY_NAME + "=?",new String[] { name }, null);  
  6.   
  7. ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();  
  8.   
  9. if (cursor.moveToFirst()) {  
  10. do {  
  11. long Id = cursor.getLong(cursor.getColumnIndex(Data.RAW_CONTACT_ID));  
  12.   
  13. ops.add(ContentProviderOperation.newDelete(  
  14. ContentUris.withAppendedId(RawContacts.CONTENT_URI,Id)).build());  
  15. try {  
  16. getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);  
  17. }   
  18. catch (Exception e){}  
  19. while (cursor.moveToNext());  
  20. cursor.close();  
  21. }  
  22. }  
修改

[java]  view plain copy
  1. <pre name="code" class="html">private void updateContact(Context context,String oldname, String name, String phone, String email,String website, String organization, String note) {  
  2.   
  3. Cursor cursor = getContentResolver().query(Data.CONTENT_URI,new String[] { Data.RAW_CONTACT_ID },  
  4.   
  5. ContactsContract.Contacts.DISPLAY_NAME + "=?",new String[] { oldname }, null);  
  6. cursor.moveToFirst();  
  7. String id = cursor.getString(cursor.getColumnIndex(Data.RAW_CONTACT_ID));  
  8. cursor.close();  
  9. ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();</pre><br>  
  10. <br>  
  11. <p></p>  
  12. <pre></pre>  
  13. <pre name="code" class="java">ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)  
  14. .withSelection(  
  15.   
  16. Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?" +  
  17. " AND " + Phone.TYPE + "=?",new String[] { String.valueOf(id),Phone.CONTENT_ITEM_TYPE,  
  18. String.valueOf(Phone.TYPE_HOME) }).withValue(Phone.NUMBER, phone).build());  
  19.   
  20. // 更新email  
  21. ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)  
  22. .withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?" +" AND " + Email.TYPE + "=?",new String[] { String.valueOf(id),Email.CONTENT_ITEM_TYPE,  
  23. String.valueOf(Email.TYPE_HOME) }).withValue(Email.DATA, email).build());  
  24.   
  25. // 更新姓名  
  26. ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)  
  27. .withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),StructuredName.CONTENT_ITEM_TYPE }).withValue(StructuredName.DISPLAY_NAME, name).build());  
  28.   
  29. // 更新网站  
  30. ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)  
  31. .withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),Website.CONTENT_ITEM_TYPE }).withValue(Website.URL, website).build());  
  32.   
  33. // 更新公司  
  34. ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)  
  35. .withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),Organization.CONTENT_ITEM_TYPE })  
  36. .withValue(Organization.COMPANY, organization).build());  
  37.   
  38. // 更新note  
  39. ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)  
  40. .withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),Note.CONTENT_ITEM_TYPE }).withValue(Note.NOTE, note).build());  
  41.   
  42. try{  
  43. getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);  
  44. catch (Exception e) {  
  45. }  
  46. }</pre><br>  
  47. <br>  
  48. <p></p>  
  49. <p>添加</p>  
  50. <p></p><pre name="code" class="java">private void addContact(Context context, String name,  
  51. String organisation,String phone, String fax, String email, String address,String website,String nickname){  
  52.   
  53. ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();  
  54.   
  55. //在名片表插入一个新名片  
  56. ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)  
  57. .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null).withValue(ContactsContract.RawContacts._ID, 0).withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).withValue(  
  58. ContactsContract.RawContacts.AGGREGATION_MODE,ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED).build());  
  59.   
  60. // add name  
  61. //添加一条新名字记录;对应RAW_CONTACT_ID为0的名片  
  62. if (!name.equals("")) {  
  63. ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)  
  64. .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(  
  65. ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE).withValue(  
  66. ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,name).build());  
  67. }  
  68.   
  69. //添加昵称</pre><pre name="code" class="java">if(!nickname.equals("")){  
  70. ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)  
  71. .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(  
  72. ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Nickname.NAME,nickname).build());</pre><pre name="code" class="java">}  
  73.   
  74. // add company  
  75. if (!organisation.equals("")) {  
  76. ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(ContactsContract.Data.MIMETYPE,  
  77. ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE).withValue(  
  78. ContactsContract.CommonDataKinds.Organization.COMPANY,organisation).withValue(  
  79. ContactsContract.CommonDataKinds.Organization.TYPE,ContactsContract.CommonDataKinds.Organization.TYPE_WORK).build());  
  80. }  
  81.   
  82. // add phone  
  83. if (!phone.equals("")) {  
  84. ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)  
  85. .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)  
  86. .withValue(ContactsContract.Data.MIMETYPE,  
  87. ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,phone).withValue(ContactsContract.CommonDataKinds.Phone.TYPE,1).build());  
  88. }  
  89.   
  90. // add Fax 传真,一般不用了  
  91. if (!fax.equals("")) {  
  92. ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(  
  93. ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(  
  94. ContactsContract.Data.MIMETYPE,  
  95. ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE).withValue(  
  96. ContactsContract.CommonDataKinds.Phone.NUMBER,fax)  
  97. .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,  
  98. ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK).build());  
  99. }  
  100.   
  101.   
  102.   
  103. // add email  
  104. if (!email.equals("")) {  
  105. ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)  
  106. .withValueBackReference(  
  107. ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(  
  108. ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Email.DATA,email).withValue(ContactsContract.CommonDataKinds.Email.TYPE,1).build());  
  109. }  
  110.   
  111. // add address  
  112. if (!address.equals("")) {  
  113. ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(  
  114. ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE).withValue(  
  115. ContactsContract.CommonDataKinds.StructuredPostal.STREET,address)  
  116. .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE,  
  117. ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK).build());  
  118. }  
  119.   
  120. // add website  
  121. if (!website.equals("")) {  
  122. ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)  
  123. .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)  
  124. .withValue(ContactsContract.Data.MIMETYPE,  
  125. ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE).withValue(  
  126. ContactsContract.CommonDataKinds.Website.URL,website)  
  127. .withValue(  
  128. ContactsContract.CommonDataKinds.Website.TYPE,  
  129. ContactsContract.CommonDataKinds.Website.TYPE_WORK).build());  
  130. }  
  131.   
  132. // add IM</pre><pre code_snippet_id="175156" snippet_file_name="blog_20140130_8_3020566" name="code" class="java">if(!im.equals("")){  
  133. //String qq="459255045"; for test  
  134. ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(  
  135. ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(  
  136. ContactsContract.Data.MIMETYPE,  
  137. ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE).withValue(  
  138. ContactsContract.CommonDataKinds.Im.DATA1,im)  
  139. .withValue(  
  140. ContactsContract.CommonDataKinds.Im.PROTOCOL,  
  141. ContactsContract.CommonDataKinds.Im.PROTOCOL_QQ).build());  
  142. }  
  143.   
  144. try {  
  145. context.getContentResolver().applyBatch(  
  146. ContactsContract.AUTHORITY, ops);  
  147. catch (Exception e){  
  148. }  
  149.   
  150. }</pre><p></p>  
  151. <p><br>  
  152. </p>  
  153. 最后功能可以实现了,我只要添加功能。  
  154. <p>但是很奇怪只能添加一次,所以又要修改,最后找到原因</p>  
  155. <p></p><pre code_snippet_id="175156" snippet_file_name="blog_20140130_9_849785" name="code" class="java">// 在名片表插入一个新名片  
  156.                 ops.add(ContentProviderOperation  
  157.                                 .newInsert(ContactsContract.RawContacts.CONTENT_URI)  
  158.                                 .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)  
  159.                                 <span style="color:#ff0000;">.withValue(ContactsContract.RawContacts._ID, 0)</span>  
  160.                                 .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)  
  161.                                 .withValue(ContactsContract.RawContacts.AGGREGATION_MODE,  
  162.                                                 ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED)  
  163.                                 .build());  
  164. 把上面代码的 红色部分去掉即可</pre><br>  
  165. <br>  
  166. <p></p>  
  167. <p>这是在一个android论坛找到的资料。</p>  
  168. <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>  
  169. <br>  
  170. <br>  
  171. </p>  
  172. <p><br>  
  173. </p>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值