Advertisement
Guest User

ContentProvider

a guest
Apr 25th, 2013
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.15 KB | None | 0 0
  1. package dradev.pocs.mycontatos;
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.util.Calendar;
  6.  
  7. import android.app.Activity;
  8. import android.app.ProgressDialog;
  9. import android.database.Cursor;
  10. import android.database.MatrixCursor;
  11. import android.graphics.Bitmap;
  12. import android.graphics.BitmapFactory;
  13. import android.net.Uri;
  14. import android.os.AsyncTask;
  15. import android.os.Bundle;
  16. import android.provider.ContactsContract;
  17. import android.support.v4.widget.SimpleCursorAdapter;
  18. import android.util.Log;
  19. import android.widget.ListView;
  20. import android.widget.Toast;
  21.  
  22. public class MainActivity extends Activity {
  23.  
  24.     SimpleCursorAdapter mAdapter;
  25.     MatrixCursor mMatrixCursor;
  26.     int quantidade;
  27.    
  28.    
  29.     private static final String CAT = "@Dradev";
  30.     @Override
  31.     protected void onCreate(Bundle savedInstanceState) {
  32.         super.onCreate(savedInstanceState);
  33.         setContentView(R.layout.activity_main);
  34.    
  35.         // The contacts from the contacts content provider is stored in this cursor
  36.         mMatrixCursor = new MatrixCursor(new String[] { "_id","name","photo","details"} );
  37.        
  38.        
  39.      // Adapter to set data in the listview
  40.         mAdapter = new SimpleCursorAdapter(getBaseContext(),
  41.             R.layout.lv_contatos_layout2,
  42.             null,
  43.             new String[] { "name","photo","details"},
  44.             new int[] { R.id.contato_nome,R.id.contato_foto,R.id.contato_detalhes}, 0);
  45.        
  46.         ListView lstContatos = (ListView)findViewById(R.id.lv_contatos);
  47.         lstContatos.setAdapter(mAdapter);
  48.        
  49.         // Creating an AsyncTask object to retrieve and load listview with contacts
  50.         ListViewContactsLoader listViewContactsLoader = new ListViewContactsLoader();
  51.  
  52.         // Starting the AsyncTask process to retrieve and load listview with contacts
  53.         listViewContactsLoader.execute();
  54.        
  55.     }
  56.        
  57.     ////////////////////////////////////////////////
  58.         /** An AsyncTask class to retrieve and load listview with contacts */
  59.         private class ListViewContactsLoader extends AsyncTask<Void, Void, Cursor>{
  60.            
  61.             Calendar dataInicial;
  62.             Calendar dataFinal;
  63.             private ProgressDialog progressDialog;
  64.            
  65.             @Override
  66.             protected void onPreExecute() {
  67.                 Log.i(CAT, "Mostrando Progress Dialog");
  68.                 progressDialog = new ProgressDialog(MainActivity.this);
  69.                 progressDialog.setMessage("Aguarde...");
  70.                 progressDialog.show();
  71.                
  72.                 dataInicial = Calendar.getInstance();
  73.             }
  74.  
  75.             @Override
  76.             protected Cursor doInBackground(Void... params) {
  77.                 Log.i(CAT, "Iniciando doInBackgorund");
  78.                 Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
  79.      
  80.                 // Querying the table ContactsContract.Contacts to retrieve all the contacts
  81.                 Cursor contactsCursor = getContentResolver().query(contactsUri, null, null, null,
  82.                 ContactsContract.Contacts.DISPLAY_NAME + " ASC ");
  83.      
  84.                 quantidade = contactsCursor.getCount();
  85.                
  86.                 if(contactsCursor.moveToFirst()){
  87.                     do{
  88.                         long contactId = contactsCursor.getLong(contactsCursor.getColumnIndex("_ID"));
  89.      
  90.                         Uri dataUri = ContactsContract.Data.CONTENT_URI;
  91.      
  92.                         // Querying the table ContactsContract.Data to retrieve individual items like
  93.                         // home phone, mobile phone, work email etc corresponding to each contact
  94.                         Cursor dataCursor = getContentResolver().query(dataUri, null,
  95.                                             ContactsContract.Data.CONTACT_ID + "=" + contactId,
  96.                                             null, null);
  97.                        
  98.                         String displayName="";
  99.                         String nickName="";
  100.                         String homePhone="";
  101.                         String mobilePhone="";
  102.                         String workPhone="";
  103.                         String photoPath="" + R.drawable.boneco;
  104.                         byte[] photoByte;
  105.                         String homeEmail="";
  106.                         String workEmail="";
  107.                         String companyName="";
  108.                         String title="";
  109.                         byte[] isPhoto;
  110.      
  111.                         if(dataCursor.moveToFirst()){
  112.                             // Getting Display Name
  113.                             displayName = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME ));
  114.                             do{
  115.      
  116.                                 // Getting NickName
  117.                                 if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE))
  118.                                     nickName = dataCursor.getString(dataCursor.getColumnIndex("data1"));
  119.      
  120.                                 // Getting Phone numbers
  121.                                 if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)){
  122.                                     switch(dataCursor.getInt(dataCursor.getColumnIndex("data2"))){
  123.                                         case ContactsContract.CommonDataKinds.Phone.TYPE_HOME :
  124.                                             homePhone = dataCursor.getString(dataCursor.getColumnIndex("data1"));
  125.                                             break;
  126.                                         case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE :
  127.                                             mobilePhone = dataCursor.getString(dataCursor.getColumnIndex("data1"));
  128.                                             break;
  129.                                         case ContactsContract.CommonDataKinds.Phone.TYPE_WORK :
  130.                                             workPhone = dataCursor.getString(dataCursor.getColumnIndex("data1"));
  131.                                             break;
  132.                                     }
  133.                                 }
  134.      
  135.                                 // Getting EMails
  136.                                 if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE ) ) {
  137.                                     switch(dataCursor.getInt(dataCursor.getColumnIndex("data2"))){
  138.                                         case ContactsContract.CommonDataKinds.Email.TYPE_HOME :
  139.                                             homeEmail = dataCursor.getString(dataCursor.getColumnIndex("data1"));
  140.                                             break;
  141.                                         case ContactsContract.CommonDataKinds.Email.TYPE_WORK :
  142.                                             workEmail = dataCursor.getString(dataCursor.getColumnIndex("data1"));
  143.                                             break;
  144.                                     }
  145.                                 }
  146.      
  147.                                 // Getting Organization details
  148.                                 if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)){
  149.                                     companyName = dataCursor.getString(dataCursor.getColumnIndex("data1"));
  150.                                     title = dataCursor.getString(dataCursor.getColumnIndex("data4"));
  151.                                 }
  152.      
  153.                                 // Pega Foto
  154.                                 if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)){
  155.                                     isPhoto = dataCursor.getBlob(dataCursor.getColumnIndex("data15"));
  156.      
  157.                                     if(isPhoto != null) {
  158.                                         photoByte = isPhoto;
  159.                                         Bitmap bitmap = BitmapFactory.decodeByteArray(photoByte, 0, photoByte.length);
  160.      
  161.                                         // Getting Caching directory
  162.                                         File cacheDirectory = getBaseContext().getCacheDir();
  163.      
  164.                                         // Temporary file to store the contact image
  165.                                         File tmpFile = new File(cacheDirectory.getPath() + "/wpta_"+contactId+".png");
  166.      
  167.                                         // The FileOutputStream to the temporary file
  168.                                         try {
  169.                                             FileOutputStream fOutStream = new FileOutputStream(tmpFile);
  170.      
  171.                                             // Writing the bitmap to the temporary file as png file
  172.                                             bitmap.compress(Bitmap.CompressFormat.PNG,100, fOutStream);
  173.      
  174.                                             // Flush the FileOutputStream
  175.                                             fOutStream.flush();
  176.      
  177.                                             //Close the FileOutputStream
  178.                                             fOutStream.close();
  179.      
  180.                                         } catch (Exception e) {
  181.                                             e.printStackTrace();
  182.                                         }
  183.                                         photoPath = tmpFile.getPath();
  184.                                     }
  185.                                    
  186.                                 }
  187.                             }while(dataCursor.moveToNext());
  188.                             String details = "";
  189.      
  190.                             // Concatenating various information to single string
  191.                             if(homePhone != null && !homePhone.equals("") )
  192.                                 details = "HomePhone : " + homePhone + "\n";
  193.                             if(mobilePhone != null && !mobilePhone.equals("") )
  194.                                 details += "MobilePhone : " + mobilePhone + "\n";
  195.                             if(workPhone != null && !workPhone.equals("") )
  196.                                 details += "WorkPhone : " + workPhone + "\n";
  197.                             if(nickName != null && !nickName.equals("") )
  198.                                 details += "NickName : " + nickName + "\n";
  199.                             if(homeEmail != null && !homeEmail.equals("") )
  200.                                 details += "HomeEmail : " + homeEmail + "\n";
  201.                             if(workEmail != null && !workEmail.equals("") )
  202.                                 details += "WorkEmail : " + workEmail + "\n";
  203.                             if(companyName != null && !companyName.equals("") )
  204.                                 details += "CompanyName : " + companyName + "\n";
  205.                             if(title != null && !title.equals("") )
  206.                                 details += "Title : " + title + "\n";
  207.      
  208.                             // Adding id, display name, path to photo and other details to cursor
  209.                             mMatrixCursor.addRow(new Object[]{ Long.toString(contactId),displayName,photoPath,details});
  210.                         }
  211.                     }while(contactsCursor.moveToNext());
  212.                 }
  213.                
  214.                
  215.                 return mMatrixCursor;
  216.             }
  217.      
  218.             ///////////////////////////////////////////////////////////
  219.            
  220.             @Override
  221.             protected void onPostExecute(Cursor result) {
  222.                 // Setting the cursor containing contacts to listview
  223.                 Log.i(CAT, "Finalizando AsynkTask");
  224.                 mAdapter.swapCursor(result);
  225.                 progressDialog.dismiss();
  226.                
  227.                 dataFinal = Calendar.getInstance();
  228.                
  229.                 long diferenca = dataFinal.getTimeInMillis() - dataInicial.getTimeInMillis();
  230.                
  231.                 Toast.makeText(MainActivity.this, "Tempo decorrido: " + diferenca , Toast.LENGTH_LONG).show();
  232.                
  233.                 Toast.makeText(MainActivity.this, "Quantidade de Contatos: " + quantidade, Toast.LENGTH_SHORT).show();
  234.             }
  235.            
  236.            
  237.         }
  238.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement