tejariapp-new-logotejariapp-new-logotejariapp-new-logotejariapp-new-logo
  • صفحه اصلی
  • پروژه ها
    • پروژه طراحی سایت
    • پروژه های اندروید
    • پروژه های تحت ویندوز
    • UI & UX
    • ربات تلگرام
  • سفارش پروژه
    • انجام پروژه اندروید (Android)
    • طراحی و ساخت اپلیکیشن موبایل
    • انجام پروژه طراحی سایت با php
    • انجام پروژه طراحی سایت با Asp.net
    • انجام پروژه سی شارپ
    • فرم سفارش پروژه
  • مدرسه ی تجاری اپ
    • طراحی سایت
    • اندروید
    • سی شارپ
    • آموزش پایگاه داده
    • برنامه های کاربردی
  • لینک های مفید
    • پرداخت آنلاین
    • درباره تجاری اپ
    • تماس با ما
استخدام برنامه نویس متلب
سفارش پروژه
✕
            هیچ نتیجه ای یافت نشدمشاهده همه نتایج

            آموزش اندروید فصل چهارم قسمت چهارم – Content Provider

            • صفحه نخست
            • مدرسه ی تجاری اپ آموزش اندروید
            • آموزش اندروید فصل چهارم قسمت چهارم – Content Provider
            آموزش برنامه نویسی اندروید فصل چهارم
            آموزش اندروید فصل چهارم قسمت سوم – بانک اطلاعاتی SQLite
            20 شهریور 1395
            آموزش برنامه نویسی اندروید فصل چهارم
            آموزش اندروید فصل چهارم قسمت پنجم – Create Content Provider
            10 مهر 1395
            منتشر شده توسط خانم منطق
            آموزش برنامه نویسی اندروید فصل چهارم

            آموزش برنامه نویسی اندروید فصل چهارم

            در قسمت چهارم آموزش اندروید مبحث Content Provider ها یا تامین کننده محتوی را آموزش میدهیم.اگر بخواهیم تعریف کوتاهی برای این مبحث در نظر بگیریم  میتوان گفت مانند یک پایگاه داده است که میتوان اطلاعات یک برنامه را درآنجا متمرکز کرده و چهار عمل اصلی را برروی آن انجام داد.

            آموزش اندروید فصل چهارم قسمت چهارم – Content Provider

            توجه : برای مشاهده تصاویر در سایز اصلی برروی آنها کلیک کنید.

            تامین کننده محتوی (Content Provider)

            مبحث دیگر در بانک اطلاعاتی نحوه به اشتراک گذاری اطلاعات است چون تنها برنامه ای که بانک را ایجاد کرده اجازه دسترسی به بانک را دارد. به همین دلیل برنامه نویسان از تکنیکی به نام تامین کننده محتوی استفاده میکنند.میتوان گفت تامین کننده محتوی درواقع شبیه به یک منبع اطلاعاتی است و ذخیره سازی اطلاعات ربطی به نحوه استفاده و استفاده کننده ندارد.

            چیزی که اینجا اهمیت پیدا میکند نحوه دسترسی برنامه های مختلف به تامین کننده محتوی است.تامین کننده محتوی شباهت زیادی به بانک اطلاعاتی دارد چرا که میتوان از آن اطلاعات را دریافت وحتی اقداماتی چون ویرایش و حذف و اضافه را نیز انجام داد.

            اندروید خود دارای چندین تامین کننده محتوی پیش فرض میباشد مانند:

            • Browser : اطلاعاتی از قبیل بوکمارک و تاریخچه و .. را نگهداری میکند.
            • CallLog : اطلااعات تماس را نگهداری میکند.
            • Contacts : اطلاعات مخاطبین را نگهداری میکند.
            • MediaStore : حاوی اطلاعات چندرسانه ای است.
            • Setting : تنظیمات سیستم را نگهداری میکند.

            علاوه بر تامین کننده های خود اندروید میتوانید خود یک تامین کننده ایجاد کنید.

            نحوه فراخوانی یا آدرس دهی نیز بسیار مهم است که به صورت زیر نوشته میشود

            <standard_prefix>://<authority>/<data_path>/<id>

            • Standard_prefix : برای استعلام گیری از یک تامین کننده محتوی همیشه مقدار ثابت content:// را دارد.
            • Authority : نام تامین کننده میباشد برای مثال هنگام استعلام از تامین کننده های توکار مثل مخاطبین این بخش مقدار contacts را میگیرد و هنگام استعلام از تامین کننده هایی که توسط برنامه نویس ایجاد شده باید نام کامل آنرا مانند tejariapp.provider را تعیین کرد.
            • Data_path : نوع اطلاعاتی است که درخواست میدهید برای مثال اگر قصد درارید اطلاعات مخاطبین را دریافت کنید تنها کافی است عبارت people را استفاده کنید.
            • Id : این بخش نیز مشخص کننده رکورد درخواستی شماست. برای مثال اگر بدنبال مخاطب دوم هستید کافی است عدد ۲ را وارد کنید و نتیجه چیزی شبیه به content://contacts/people/2 خواهد بود.

            مثالی از تامین کننده محتوی مخاطبین

            پروژه جدیدی با نام دلخواه ایجاد میکنیم و در فایل xml آن تنها یک TextView به صورت زیر ایجاد میکنیم

            <TextView
            
                    android:id="@+id/textView1"
            
                    android:layout_width="wrap_content"
            
                    android:layout_height="wrap_content"
            
                    android:layout_alignParentTop="true"
            
                    android:layout_centerHorizontal="true"
            
                    android:layout_marginTop="127dp"
            
                    android:gravity="center"
            
                    android:text="TextView" />
            

            حال در فایل جاوا برنامه نیز چنین کدنویسی میکنیم

            package com.example.contentproviderprj;
            
            
            
            import android.app.Activity;
            
            import android.content.ContentResolver;
            
            import android.database.Cursor;
            
            import android.net.Uri;
            
            import android.os.Bundle;
            
            import android.provider.ContactsContract;
            
            import android.support.v4.content.CursorLoader;
            
            import android.widget.TextView;
            
            
            
            public class MainActivity extends Activity {
            
                    TextView txt;
            
                    @Override
            
                    protected void onCreate(Bundle savedInstanceState) {
            
                             super.onCreate(savedInstanceState);
            
                             setContentView(R.layout.activity_main);
            
            
            
                             txt=(TextView)findViewById(R.id.textView1);
            
                             fetchcontacts();
            
                    }
            
            
            
                    public void fetchcontacts() {
            
                             String phonenum=null;
            
                             String email=null;
            
                             Uri CONTENT_URI=ContactsContract.Contacts.CONTENT_URI;
            
            
            
                             String _ID=ContactsContract.Contacts._ID;
            
                             String DISPLAY_NAME=ContactsContract.Contacts.DISPLAY_NAME;
            
                             String HAS_PHONE_NUM=ContactsContract.Contacts.HAS_PHONE_NUMBER;
            
            
            
                             Uri PhoneCONTENT_URI=ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
            
                             String PhoneCONTACT_ID=ContactsContract.CommonDataKinds.Phone.CONTACT_ID;
            
                             String NUMBER=ContactsContract.CommonDataKinds.Phone.NUMBER;
            
            
            
                             Uri EmailCONTENT_URI=ContactsContract.CommonDataKinds.Email.CONTENT_URI;
            
                             String EmailCONTACT_ID=ContactsContract.CommonDataKinds.Email.CONTACT_ID;
            
                             String DATA=ContactsContract.CommonDataKinds.Email.DATA;
            
            
            
                             StringBuffer output=new StringBuffer();
            
                             ContentResolver cr=getContentResolver();
            
                             Cursor cursor=cr.query(CONTENT_URI, null, null, null,null);
            
                             //loop for every contact in the phone
            
                             if(cursor.getCount() > 0){
            
                                       while(cursor.moveToNext()){
            
                                                String contact_id=cursor.getString(cursor.getColumnIndex(_ID));
            
                                                String name=cursor.getString(cursor.getColumnIndex(DISPLAY_NAME));
            
                                                int hasphonenum=
            Integer.parseInt(cursor.getString(cursor.getColumnIndex(HAS_PHONE_NUM)));
            
            
            
                                                if(hasphonenum > 0){
            
                                                          output.append("\n First Name:" + name);
            
            
            
                                                          //query and loop for every phone number of contact
            
                                                          Cursor phonecr=cr.query(PhoneCONTENT_URI, null,
             PhoneCONTACT_ID + " =?", new String[] {contact_id}, null);
            
            
            
                                                          while(phonecr.moveToNext()){
            
                                                                    phonenum=
            phonecr.getString(phonecr.getColumnIndex(NUMBER));
            
                                                                    output.append("\n Phone number : " + phonenum);
            
                                                          }
            
                                                          phonecr.close();
            
            
            
                                                          //query and loop for every email of the contact
            
                                                          Cursor emailcr=cr.query(
            EmailCONTENT_URI, null, EmailCONTACT_ID +
             " =?", new String[] {contact_id}, null);
            
                                                          while(emailcr.moveToNext()){
            
                                                                    email
            =emailcr.getString(emailcr.getColumnIndex(DATA));
            
                                                                    output.append("\n Email : " + email);
            
                                                          }
            
                                                          emailcr.close();
            
                                                }
            
                                                output.append("\n");
            
                                       }
            
                                       txt.setText(output);
            
                             }
            
                    }
            
            }
            

            دستورات فایل جاوا را اگربخواهیم قابل فهم تر کنیم میتوان گفت در onCreate برنامه که هنگام ایجاد برنامه فراخوانی میشود متد fetchconacts راصدا زدیم و خارج از بلاک onCreate آن را تعریف کرده ایم.

            درون این متد ابتدا دو متغیر phonenum و email را تعریف میکنیم که در ادامه برای مقداردهی شماره و ایمیلی که از conacts استخراج میشود استفاده خواهیم کرد. وهمچنین شی CONTACT_URI که آدرس Contacts را درون خود جا داده ب استفاده از ثابت های از پیش تعریف شده نکته قابل توجه این است که عبارت ContactsContract.Contacts.CONTENT_URI برابر با مقدار content://contacts/people است اما در اندروید ۲ به بعد از ثابت ها بجای آدرس دهی دستی استفاده میشود. مقدار CONTACT_URI از نوع URI است چون در واقع یک آدرس Uri را برمیگرداند در حالی که مقادیر ID , DISPLAY_NAME , HAS_PHONE_NUM چون مقادیر شماره و نام و ای دی را برمیگردانند از نوع رشته ای است. 

               </span></p>
            
            String phonenum=null;
            
                             String email=null;
            
                             Uri CONTENT_URI=ContactsContract.Contacts.CONTENT_URI;
            
            
            
                             String _ID=ContactsContract.Contacts._ID;
            
                             String DISPLAY_NAME=ContactsContract.Contacts.DISPLAY_NAME;
            
                             String HAS_PHONE_NUM=ContactsContract.Contacts.HAS_PHONE_NUMBER;
            

            *برای تامین کننده های توکار دیگر نیز به صورت زیر مینویسیم

            • BOOKMARKS_URI
            • CONTENT_URI
            • Images.Media.EXTERNAL_CONTENT_URI
            • CONTENT_URI

            در ادامه برای شماره تلفن و ایمیل نیز به همین صورت متغیر هارا تعریف میکنیم.

            سپس Buffer و CuntentResolver را بصورت زیر تعریف میکنیم.Buffer همانطور که قبلا بارها درباره اش گفته ایم به عنوان ظرفی برای نگهداری نتایج عمل میکند تا در انتها این نتایج را در محلی نمایش دهد.ContentResolver نیز میتوان گفت اجرا کننده ContentProvider ها میباشد و دستورات را بااستفاده از متد query این شی به تامین کننده محتوی اعمال میکنیم.

            StringBuffer output=new StringBuffer();
            
                             ContentResolver cr=getContentResolver();
            
                             Cursor cursor=cr.query(CONTENT_URI, null, null, null,null);
            

            Cursor یا اشاره گر نیز شامل نتیجه کوری خواهد بود. شکل کلی متد query بصورت زیر است

            >query(uri, projection, selection, selectionArgs, sortOrder)
            

            پارامترهای این متد نیز به شرح زیر است :

            Uri : مقدار URI مربوط به دستورات است.

            Projection : مشخص کننده ستون هایی است که باید استخراج شود.

            Selection , selectionArgs : با استفاده از این دو آرگومان میتوان از دستور where استفاده کرد و شرطی لحاظ کرد و selectionArgs نیز مقداری است که در شرط باید در نظر گرفته شود.

            setOrder :آخرین آرگومان نیز مربوط به مرتب سازی است.

            سپس مقدار cursor را چک میکند و درصورتی که مخاطبی وجود داشت بااستفاده از دستور while تازمانی که به انتها مخاطبین برسد مقادیر ای دی و نام و شماره را درون متغیر ها قرار میدهد.

            if(cursor.getCount() > 0){
            
                                       while(cursor.moveToNext()){
            
                                                String contact_id=cursor.getString(cursor.getColumnIndex(_ID));
            
                                                String name=cursor.getString(cursor.getColumnIndex(DISPLAY_NAME));
            
                                                int hasphonenum=
            Integer.parseInt(cursor.getString(cursor.getColumnIndex(HAS_PHONE_NUM)));
            

            و در ادامه اگر تعداد شماره موبایل ها بیش از ۰ بود آنگاه مقدار نام ثبت شده را درون متغیر buffer قرار میدهد و با استفاده از یک کوری دیگر که اینبار Uri مروبط به Phone و شرطی که براساس contact_id اداره میشود مقادیر شماره تلفن های مربوط به هرای دی را استخراج کرده و درون متغیر phonecr قرار میدهد در ادامه با شرط while شماره تلفن های هر آیدی را در شی بافر قرار میدهد.

            <pre class="lang:default decode:true">if(hasphonenum > 0){
            
                                                          output.append("\n First Name:" + name);
            
            
            
                                                          //query and loop for every phone number of contact
            
                                                          Cursor phonecr=cr.query(PhoneCONTENT_URI, null,
             PhoneCONTACT_ID + " =?", new String[] {contact_id}, null);
            
            
            
                                                          while(phonecr.moveToNext()){
            
                                                                    phonenum=
            phonecr.getString(phonecr.getColumnIndex(NUMBER));
            
                                                                    output.append("\n Phone number : " + phonenum);
            
                                                          }
            
                                                          phonecr.close();
            

            برای آیتم ایمیل نیز به همین صورت کدنویسی میکنیم  و در انتها نیز شی بافر را درون TextView خود قرار میدهیم.

            txt.setText(output);                                   
            

             

            حال وارد شبیه ساز خود شده و ابتدا چند contact وارد دستگاه کنید سپس برنامه را اجرا کنید و نتیجه را به صورت زیر ببینید

            آموزش اندروید فصل چهارم-قسمت چهارم

            مدرس : خانم مهندس داودی نژاد

            آموزش اندروید فصل چهارم قسمت سوم

            آموزش اندروید فصل چهارم قسمت پنجم

            اشتراک گذاری

            پست های مرتبط

            دستورات جریان کنترل (Control flow statements) یا دستورات شرطی و حلقه ها در زبان برنامه نویسی دارت Dart

            دستورات جریان کنترل (Control flow statements) یا دستورات شرطی و حلقه ها در زبان برنامه نویسی دارت Dart

            30 بهمن 1400

            دستورات شرطی و حلقه ها در زبان برنامه نویسی دارت (Dart)


            ادامه مطلب
            آموزش عملگرها یا Operator ها در زبان برنامه نویسی دارت یا Dart

            آموزش عملگرها یا Operator ها در زبان برنامه نویسی دارت یا Dart

            30 بهمن 1400

            آموزش عملگرها یا Operator ها در زبان برنامه نویسی دارت (Dart)


            ادامه مطلب
            توابع در زبان برنامه نویسی دارت (Dart)

            توابع در زبان برنامه نویسی دارت (Dart)

            27 بهمن 1400

            توابع در زبان برنامه نویسی دارت (Dart)


            ادامه مطلب

            دیدگاهتان را بنویسید لغو پاسخ

            نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

            ساخت اپلیکیشن های موبایل

            • ساخت اپلیکیشن فروشگاهی
            • ساخت اپلیکشن ابزاری و خدماتی
            • ساخت اپلیکیشن آموزشی
            • و هزاران موضوع دیگر

             
            کلیک کنید

            آخرین دیدگاه ها

            • 9 اسفند 1401

              مهری اصغری نظر در پیاده سازی اولین پروژه با فلاتر Flutter

            • 26 آبان 1401

              سجاد نظر در پروژه مدیریت سیستم مدرسه با سی شارپ و sql server

            • 7 خرداد 1401

              داودی نظر در آموزش استفاده از ckeditor همراه با آپلود عکس در لاراول 6

            تجاری اپ در شبکه های اجتماعی

            لوگوی تایید پرداخت آنلاین

            2015-2022 © تمامي حقوق مادي و معنوي اين وب سايت نزد تجاری اپ محفوظ بوده و هر گونه کپي برداري از مطالب پيگرد قانوني به همراه دارد! | طراح سایت : ProgRun
            سفارش پروژه
                      هیچ نتیجه ای یافت نشدمشاهده همه نتایج