خانه » لایبرری های مفید و تجربیات شخصی خیلی مفید !!! » مسابقه برنامه نویسی Schallenge » پاسخ سوالات مسابقه برنامه نویسی اندروید Schallenge (سوال ۱-اضافه کردن یک مخاطب به Contact)

پاسخ سوالات مسابقه برنامه نویسی اندروید Schallenge (سوال ۱-اضافه کردن یک مخاطب به Contact)

سلام من در مسابقه نفر سوم شدم ، بعضی از دوستان در وبلاگ مسابقه جواب سوال ها رو درخواست کرده بودن ، من هم جواب های خودم رو اینجا قرار میدم تا دوستان از اون استفاده ببرن.

خوب سوال اول خواسته بود :
یک عکس به وسیله دوربین از کاربر گرفته شود. از کاربر بخواهید اطلاعات شخصی را وارد کند. این اطلاعات حداقل شامل نام، نام خانوادگی و email
باید باشد. سپس با توجه به اطلاعات وارد شده یک مخاطب به مخاطب های دستگاه فرد اضافه کنید. زمانی که که نرم افزار Contact دستگاه باز شود
باید این مخاطب در لیست مخاطبان موجود باشد.

پاسخ :
کد های جاوای پروژه :

package ir.iact.ContactManager.activity;

import android.app.Activity;
import android.content.ContentProviderOperation;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.view.Window;
import android.widget.*;
import ir.iact.ContactManager.R;

import java.io.ByteArrayOutputStream;
import java.util.ArrayList;

public class MainActivity extends Activity {

    private static final int CAMERA_REQUEST = 1;

    private ImageView imageView;
    private EditText name;
    private EditText lastName;
    private EditText email;
    private EditText mobileNumber;
    private EditText homeNumber;
    private Button getPictureButton;
    private Button saveContactButton;

    private Bitmap photo;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
        // Init Views
        initViews();
        // Set Listeners
        setOnClickListeners();
    }

    /**
     * define views
     */
    private void initViews() {
        imageView = (ImageView) findViewById(R.id.mainActivity_imageView);
        name = (EditText) findViewById(R.id.mainActivity_name);
        lastName = (EditText) findViewById(R.id.mainActivity_lastName);
        email = (EditText) findViewById(R.id.mainActivity_email);
        mobileNumber = (EditText) findViewById(R.id.mainActivity_mobileNumber);
        homeNumber = (EditText) findViewById(R.id.mainActivity_homeNumber);
        getPictureButton = (Button) findViewById(R.id.mainActivity_getPicture);
        saveContactButton = (Button) findViewById(R.id.mainActivity_saveContactButton);
    }

    /**
     * set Listeners
     */
    private void setOnClickListeners() {
        getPictureButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // create camera Intent
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
        });

        saveContactButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // save to Contacts
                saveContact(name.getText().toString(), lastName.getText().toString(), email.getText().toString(),
                        mobileNumber.getText().toString(), homeNumber.getText().toString());
            }
        });


    }

    /**
     * get bitmap from Camera Activity
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
            photo = (Bitmap) data.getExtras().get("data");
            imageView.setImageBitmap(photo);
        }
    }

    /**
     * create Contact if not Exist
     */
    private void saveContact(String name, String lastName, String email, String mobileNumber, String homeNumber) {

        // check if some important values are empty return
        if (name.isEmpty()) {
            Toast.makeText(MainActivity.this, R.string.noName, Toast.LENGTH_LONG).show();
            return;
        }
        if (mobileNumber.isEmpty() && homeNumber.isEmpty()) {
            Toast.makeText(MainActivity.this, R.string.noNumber, Toast.LENGTH_LONG).show();
            return;
        }

        // Create an ContentProviderOperation Array List
        ArrayList ops = new ArrayList();

        ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
                .build());

        // Add Name
        if (name != null) {
            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());
        }

        // Add Last name
        if (lastName != null) {
            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.FAMILY_NAME, lastName).build());
        }

        // AddEmail
        if (email != null) {
            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, ContactsContract.CommonDataKinds.Email.TYPE_WORK)
                    .build());
        }
        // Add Mobile Number
        if (mobileNumber != null) {
            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, mobileNumber)
                    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
                    .build());
        }

        // Add Home Numbers
        if (homeNumber != null) {
            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, homeNumber)
                    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME)
                    .build());
        }

        // Add Photo Numbers
        if (photo != null) {
            Bitmap bmImage = photo;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bmImage.compress(Bitmap.CompressFormat.PNG, 80, baos);
            byte[] b = baos.toByteArray();

            ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                    .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
                    .withValue(ContactsContract.CommonDataKinds.Photo.DATA15, b)
                    .build());
        }

        // Asking the Contact provider to create a new contact
        try {
            getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
            Toast.makeText(MainActivity.this, R.string.saveSuccess, Toast.LENGTH_LONG).show();
            resetAll();
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(MainActivity.this, "Exception: " + e.getMessage(), Toast.LENGTH_LONG).show();
        }

    }

    /**
     * reset All values
     */
    private void resetAll() {
        name.setText("");
        lastName.setText("");
        email.setText("");
        mobileNumber.setText("");
        homeNumber.setText("");
        imageView.setImageBitmap(null);
    }

}

در کد بالا برای گرفتن عکس از دوربین از اینتنت خود اندروید استفاده کرده ام ، و کار گرفتن عکس رو به سیستم اندروید سپردم :

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);

و البته برای دریافت پاسخ (عکس دریافتی) باید متد onActivityResult() رو Override کرد:

 /**
     * get bitmap from Camera Activity
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
            photo = (Bitmap) data.getExtras().get("data");
            imageView.setImageBitmap(photo);
        }
    }

تصویر به صورت bitmap در اینتنت برگشتی قرار می گیرد و در کد بالا تصویر بازگشتی رو در imageView نمایش داده ام

حال برای ذخیره مقادیر در لیست مخاطبان Contact List از کد زیر استفاده کرده ام :

        // Create an ContentProviderOperation Array List
        ArrayList ops = new ArrayList();

        ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
                .build());

        // Add Name
        if (name != null) {
            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());
        }

        // Add Last name
        if (lastName != null) {
            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.FAMILY_NAME, lastName).build());
        }

        // AddEmail
        if (email != null) {
            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, ContactsContract.CommonDataKinds.Email.TYPE_WORK)
                    .build());
        }
        // Add Mobile Number
        if (mobileNumber != null) {
            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, mobileNumber)
                    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
                    .build());
        }

        // Add Home Numbers
        if (homeNumber != null) {
            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, homeNumber)
                    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME)
                    .build());
        }

        // Add Photo Numbers
        if (photo != null) {
            Bitmap bmImage = photo;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bmImage.compress(Bitmap.CompressFormat.PNG, 80, baos);
            byte[] b = baos.toByteArray();

            ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                    .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
                    .withValue(ContactsContract.CommonDataKinds.Photo.DATA15, b)
                    .build());
        }

        // Asking the Contact provider to create a new contact
        try {
            getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
            Toast.makeText(MainActivity.this, R.string.saveSuccess, Toast.LENGTH_LONG).show();
            resetAll();
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(MainActivity.this, "Exception: " + e.getMessage(), Toast.LENGTH_LONG).show();
        }

در این کد ابتدا یک لیست از ContentProviderOperation ساخته شده
سپس در صورتی که هریک از مقادیر خالی نبود ، به لیست اضافه می شود.
و در پایان در لیست مخاطبان اضافه می شود :

getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

سورس کد برنامه ( نوشته شده در IntelliJ IDEA )

برچسب ها:
پست قبلی
پست بعدی

درباره ایلیا عابدینی

برنامه نویس اندروید و کارشناس مهندسی پزشکی، نفر سوم مسابقه برنامه نویسی اندروید http://www.schallenge.ir ، از سال 92 برنامه نویسی اندروید رو شروع کردم و در حال حاضر در شرکت عصر دانش در حال توسعه اپلیکیشن تجارت پی می باشدم ، این وبلاگ رو ساختم تا تجربیات روزانه و مفید خودم رو داخل اون بزارم. رزومه : iact.ir/cv

5 دیدگاه

  1. سلام. میشه سوالهای دیگه مسابقه رو هم بذارید؟

    حتی اگه جوابهاش هم نباشه باز به درد ما می خوره

    ممنون

  2. یه سوال موقع مسابقه امکان استفاده از اینترنت یا پی دی اف خاصی هم هست، که با خوت ببری؟

  3. اقا دمت گرم 

    اگه میشه ادامه بده 

    کارت درسته

  4. سلام
    میشه جواب سوال دوم پارسال رو هم بزارین
    (طراحی ویجت)

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نمی شود.علامت دارها لازمند. *

*

رفتن به بالا