به اشتراک گذاری (share)، در برنامه نویسی اندروید

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
فهرست تاپیک:

  1. به اشتراک گذاری متن، در برنامه نویسی اندروید
  2. به اشتراک گذاری (share) عکس، در برنامه نویسی اندروید
  3. به اشتراک گذاری (share) یک فایل صوتی (مثلا mp3)، با استفاده از Intent ، در برنامه نویسی اندروید
  4. افزودن امکان دریافت انواع اطلاعات (متن، عکس و ...) به اشتراک گذاری شده از برنامه های اندروید دیگر، به برنامه اندروید خود، در برنامه نویسی اندروید
  5. افزودن امکان دریافت یک آدرس اینترنتی (آدرس URL) به اشتراک گذاری شده از برنامه های اندروید دیگر، به برنامه اندروید خود (با قابلیت نمایش برنامه، تنها برای یک دامنه خاص) و سپس پردازش بر روی URL ، در برنامه نویسی اندروید


منبع: kelidestan
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به اشتراک گذاری متن، در برنامه نویسی اندروید

به اشتراک گذاری متن، در برنامه نویسی اندروید

در این آموزش، چگونگی به اشتراک گذاری یک متن را شرح خواهیم داد. حتما تاکنون در برنامه های مختلف دیده اید که با اشاره بر روی یک دکمه (button)، گزینه های مختلفی برای به اشتراک گذاری متن (مثل ارسال با پیامک یا bluetooth) نمایش داده می شود، مثل شکل زیر :

android-203.jpg

در ادامه یک برنامه اندروید می سازیم که activity اصلی آن دارای یک دکمه (button) است که اگر بر روی آن دکمه اشاره کنیم، یک متن، برای اشتراک گذاری آماده می شود.
در برنامه eclipse ، ابتدا یک پروژه اندروید با نام iran-eng.com_ShareText بسازید (نام package را برابر com.iran-eng.sharetext انتخاب کنید. نام activity اصلی را برابر MainActivity انتخاب کنید و فایل xml متناظر آن را هم، activity_main انتخاب کنید).
ابتدا فایل activity_main.xml را باز می کنیم :




android-196.jpg

ظاهر گرافیکی آن به صورت زیر می باشد (به طور پیش فرض دارای یک TextView است) :

android-195.jpg

و کدهای آن به صورت زیر است :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]RelativeLayout xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/COLOR]
    xmlns[COLOR=#339933]:[/COLOR]tools[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/tools"[/COLOR]
    android[COLOR=#339933]:[/COLOR]layout_width[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"match_parent"[/COLOR]
    android[COLOR=#339933]:[/COLOR]layout_height[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"match_parent"[/COLOR]
    android[COLOR=#339933]:[/COLOR]paddingBottom[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@dimen/activity_vertical_margin"[/COLOR]
    android[COLOR=#339933]:[/COLOR]paddingLeft[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@dimen/activity_horizontal_margin"[/COLOR]
    android[COLOR=#339933]:[/COLOR]paddingRight[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@dimen/activity_horizontal_margin"[/COLOR]
    android[COLOR=#339933]:[/COLOR]paddingTop[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@dimen/activity_vertical_margin"[/COLOR]
    tools[COLOR=#339933]:[/COLOR]context[COLOR=#339933]=[/COLOR][COLOR=#0000FF]".MainActivity"[/COLOR] [COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR]TextView
        android[COLOR=#339933]:[/COLOR]layout_width[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"wrap_content"[/COLOR]
        android[COLOR=#339933]:[/COLOR]layout_height[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"wrap_content"[/COLOR]
        android[COLOR=#339933]:[/COLOR]text[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/hello_world"[/COLOR] [COLOR=#339933]/>[/COLOR]

[COLOR=#339933]</[/COLOR]RelativeLayout[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
ابتدا باید TextView را حذف کنیم و سپس یک دکمه (button) در فایل قرار بدهیم. برای این منظور، کدها را به صورت زیر تغییر می دهیم (نوع لایه را هم از RelativeLayout به LinearLayout تغییر می دهیم، البته این مورد اختیاری است) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]LinearLayout xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/COLOR]
    xmlns[COLOR=#339933]:[/COLOR]tools[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/tools"[/COLOR]
    android[COLOR=#339933]:[/COLOR]layout_width[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"match_parent"[/COLOR]
    android[COLOR=#339933]:[/COLOR]layout_height[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"match_parent"[/COLOR]
    android[COLOR=#339933]:[/COLOR]orientation[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"vertical"[/COLOR]
    android[COLOR=#339933]:[/COLOR]paddingBottom[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@dimen/activity_vertical_margin"[/COLOR]
    android[COLOR=#339933]:[/COLOR]paddingLeft[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@dimen/activity_horizontal_margin"[/COLOR]
    android[COLOR=#339933]:[/COLOR]paddingRight[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@dimen/activity_horizontal_margin"[/COLOR]
    android[COLOR=#339933]:[/COLOR]paddingTop[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@dimen/activity_vertical_margin"[/COLOR]
    tools[COLOR=#339933]:[/COLOR]context[COLOR=#339933]=[/COLOR][COLOR=#0000FF]".MainActivity"[/COLOR] [COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR][COLOR=#003399]Button[/COLOR]
        android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/button1"[/COLOR]
        android[COLOR=#339933]:[/COLOR]layout_width[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"match_parent"[/COLOR]
        android[COLOR=#339933]:[/COLOR]layout_height[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"wrap_content"[/COLOR]
        android[COLOR=#339933]:[/COLOR]text[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"Share Text"[/COLOR]
        android[COLOR=#339933]:[/COLOR]onClick[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"shareData"[/COLOR] [COLOR=#339933]/>[/COLOR]

[COLOR=#339933]</[/COLOR]LinearLayout[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
بخش مهم کد بالا، خط زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]android[COLOR=#339933]:[/COLOR]onClick[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"shareData"[/COLOR][/FONT]
[/FONT][/COLOR]
اکنون ظاهر گرافیکی فایل activity_main.xml به صورت زیر است :

android-197.jpg

در این مرحله، قصد داریم که متن مورد نظرمان که قرار است به اشتراک گذاشته شود را در فایل strings.xml تعریف کنیم. فایل strings.xml را باز می کنیم :



android-197.jpg

کدهای آن، به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<?[/COLOR]xml version[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR] encoding[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"utf-8"[/COLOR][COLOR=#339933]?>[/COLOR]
[COLOR=#339933]<[/COLOR]resources[COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR]string name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"app_name"[/COLOR][COLOR=#339933]>[/COLOR]iran-eng.[COLOR=#006633]com_ShareText[/COLOR][COLOR=#339933]</[/COLOR]string[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]string name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"action_settings"[/COLOR][COLOR=#339933]>[/COLOR]Settings[COLOR=#339933]</[/COLOR]string[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]string name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"hello_world"[/COLOR][COLOR=#339933]>[/COLOR]Hello world[COLOR=#339933]!</[/COLOR]string[COLOR=#339933]>[/COLOR]

[COLOR=#339933]</[/COLOR]resources[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
ما یک رشته (string) جدید با نام my_text می سازیم و متن مورد نظرمان را در آن قرار می دهیم. بنابراین کدهای فایل strings.xml به صورت زیر در می آید :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<?[/COLOR]xml version[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR] encoding[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"utf-8"[/COLOR][COLOR=#339933]?>[/COLOR]
[COLOR=#339933]<[/COLOR]resources[COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR]string name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"app_name"[/COLOR][COLOR=#339933]>[/COLOR]iran-eng.[COLOR=#006633]com_ShareText[/COLOR][COLOR=#339933]</[/COLOR]string[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]string name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"action_settings"[/COLOR][COLOR=#339933]>[/COLOR]Settings[COLOR=#339933]</[/COLOR]string[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]string name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"hello_world"[/COLOR][COLOR=#339933]>[/COLOR]Hello world[COLOR=#339933]!</[/COLOR]string[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]string name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"my_text"[/COLOR][COLOR=#339933]>[/COLOR]آموزش برنامه نویسی اندروید در سایت کلیدستان[COLOR=#339933]</[/COLOR]string[COLOR=#339933]>[/COLOR]

[COLOR=#339933]</[/COLOR]resources[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
اکنون فایل MainActivity.java را باز می کنیم :

android-198.jpg


کدهای فایل MainActivity.java به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]package[/B] [COLOR=#006699]com.[/COLOR][/FONT][/FONT][/COLOR][COLOR=#006699][FONT=monospace]iran-eng[/FONT][/COLOR][COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#006699].sharetext[/COLOR][COLOR=#339933];[/COLOR]

[B]import[/B] [COLOR=#006699]android.os.Bundle[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.app.Activity[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.Menu[/COLOR][COLOR=#339933];[/COLOR]

[B]public[/B] [B]class[/B] MainActivity [B]extends[/B] Activity [COLOR=#009900]{[/COLOR]

        @Override
        [B]protected[/B] [COLOR=#000066][B]void[/B][/COLOR] onCreate[COLOR=#009900]([/COLOR]Bundle savedInstanceState[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                [B]super[/B].[COLOR=#006633]onCreate[/COLOR][COLOR=#009900]([/COLOR]savedInstanceState[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                setContentView[COLOR=#009900]([/COLOR]R.[COLOR=#006633]layout[/COLOR].[COLOR=#006633]activity_main[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]

        @Override
        [B]public[/B] [COLOR=#000066][B]boolean[/B][/COLOR] onCreateOptionsMenu[COLOR=#009900]([/COLOR][COLOR=#003399]Menu[/COLOR] menu[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                [COLOR=#666666][I]// Inflate the menu; this adds items to the action bar if it is present.[/I][/COLOR]
                getMenuInflater[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]inflate[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]menu[/COLOR].[COLOR=#006633]main[/COLOR], menu[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                [B]return[/B] [COLOR=#000066][B]true[/B][/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]

[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
کدهای این فایل را به صورت زیر تغییر می دهیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]package[/B] [COLOR=#006699]com.iran-eng.sharetext[/COLOR][COLOR=#339933];[/COLOR]

[B]import[/B] [COLOR=#006699]android.os.Bundle[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.app.Activity[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.content.Intent[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.Menu[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.View[/COLOR][COLOR=#339933];[/COLOR]

[B]public[/B] [B]class[/B] MainActivity [B]extends[/B] Activity [COLOR=#009900]{[/COLOR]

        @Override
        [B]protected[/B] [COLOR=#000066][B]void[/B][/COLOR] onCreate[COLOR=#009900]([/COLOR]Bundle savedInstanceState[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                [B]super[/B].[COLOR=#006633]onCreate[/COLOR][COLOR=#009900]([/COLOR]savedInstanceState[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                setContentView[COLOR=#009900]([/COLOR]R.[COLOR=#006633]layout[/COLOR].[COLOR=#006633]activity_main[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]
        
        [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] shareData[COLOR=#009900]([/COLOR][COLOR=#003399]View[/COLOR] view[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_SEND[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        intent.[COLOR=#006633]setType[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"text/plain"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#003399]String[/COLOR] my_string [COLOR=#339933]=[/COLOR] getResources[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]getString[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]string[/COLOR].[COLOR=#006633]my_text[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        intent.[COLOR=#006633]putExtra[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]EXTRA_TEXT[/COLOR], my_string[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        startActivity[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]createChooser[/COLOR][COLOR=#009900]([/COLOR]intent, [COLOR=#0000FF]"Share this text via"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]

        @Override
        [B]public[/B] [COLOR=#000066][B]boolean[/B][/COLOR] onCreateOptionsMenu[COLOR=#009900]([/COLOR][COLOR=#003399]Menu[/COLOR] menu[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                [COLOR=#666666][I]// Inflate the menu; this adds items to the action bar if it is present.[/I][/COLOR]
                getMenuInflater[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]inflate[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]menu[/COLOR].[COLOR=#006633]main[/COLOR], menu[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                [B]return[/B] [COLOR=#000066][B]true[/B][/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]

[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
اکنون پروژه اندروید آماده است و می توانید آن را به روش دلخواه خود، تست کنید.

با اجرای برنامه اندروید، بر روی یک گوشی، صفحه زیر نمایش داده می شود :

android-200.jpg


با اشاره بر روی دکمه (button)، گزینه های زیر نمایش داده می شود :

android-201.jpg

این گزینه ها، تمامی مواردی را نشان می دهد که قابلیت اشتراک گذاری متن، در آنها وجود دارد. مثلا یکی از گزینه ها، گزینه Messaging می باشد که برای ارسال متن به صورت یک پیامک (sms) به کار می رود. با انتخاب این گزینه، صفحه ای نمایش داده می شود که در آن، متن مورد نظر ما به عنوان متن پیامک (sms) نوشته شده و تنها کافی است که کاربر شماره فرد را وارد کرده و سپس پیامک (sms) را ارسال کند :

android-202.jpg

فایل های پروژه اندروید را می توانید از لینک های زیر دریافت کنید :
 

پیوست ها

  • 117.zip
    658.1 کیلوبایت · بازدیدها: 0
  • 118.rar
    179.1 کیلوبایت · بازدیدها: 0

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به اشتراک گذاری (share) عکس، در برنامه نویسی اندروید

به اشتراک گذاری (share) عکس، در برنامه نویسی اندروید

اگرچه در اکثر مراجع، شیوه به اشتراک گذاری عکس با Intent را آموزش می دهند، اما اکثر کاربران نمی دانند که باید ابتدا یک کپی از عکس در حافظه خارجی (External Storage) تهیه کنند تا به اشتراک گذاری به طور صحیح عمل کند. زیرا اگر اینگونه کد ننویسند، ممکن است که به اشتراک گذاری بتواند به برخی برنامه ها، عکس را بفرستد اما برای برخی دیگر (مثل bluetooth)، عکس ارسال نگردد. بنابراین، قصد دارم که در این آموزش، یک کد کامل را برای این منظور شرح بدهم تا روند به اشتراک گذاری با Intent را به طور کامل متوجه بشوید.

علاوه بر این، بد نیست تذکر بدهیم که معمولا برای به اشتراک گذاری، از Content Provider نیز می توان استفاده کرد که کمی پیچیده تر است، اما در این مبحث، تنها به اشتراک گذاری با Intent را شرح می دهیم.

توسط کدهایی که شرح خواهیم داد، ابتدا یک فولدر با نام myFolder ساخته می شود که قرار است درون آن فایلی به صورت کپی از عکس مورد نظر ما ساخته شود (که در گالری نیز قابل مشاهده خواهد بود، البته فقط در برخی گوشی ها. برای قابل مشاهده بودن در همه گوشی ها، باید یک سری کد نوشته شود که فعلا در این مبحث، به آن نمی پردازیم)، سپس عکس اصلی مورد نظرمان که دارای نام image_1 است، از فولدر مخصوص عکس برنامه اندروید (پوشه drawable) خوانده شده و به bitmap تبدیل می شود و سپس bitmap را به صورت یک کپی از عکس اصلی، در فولدر myFolder ذخیره می کنیم. در آخر از Intent ، برای به اشتراک گذاری عکس کپی شده در فولدر myFolder استفاده خواهیم کرد. نکته مهم این است که اگر از عکس، در حافظه خارجی (external storage) کپی تهیه نمی کردیم و سعی می کردیم که خود عکس را به اشتراک بگذاریم، ممکن بود که برای برخی برنامه ها (مثل bluetooth) عکس مورد نظرمان ارسال نگردد.

نام عکسی که به صورت کپی تهیه می شود، یک نام با پیشوند Image_ و یک عدد تصادفی و با فرمت .jpg خواهد بود.

کدها به صورت زیر می باشند :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[COLOR=#003399]File[/COLOR] dir [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR] [COLOR=#009900]([/COLOR]root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"/myFolder"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
dir.[COLOR=#006633]mkdirs[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666][I]// build directory[/I][/COLOR]
[COLOR=#003399]Random[/COLOR] generator [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]Random[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#000066][B]int[/B][/COLOR] n [COLOR=#339933]=[/COLOR] [COLOR=#CC66CC]10000[/COLOR][COLOR=#339933];[/COLOR]
n [COLOR=#339933]=[/COLOR] generator.[COLOR=#006633]nextInt[/COLOR][COLOR=#009900]([/COLOR]n[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]String[/COLOR] fileName [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"Image-"[/COLOR][COLOR=#339933]+[/COLOR] n [COLOR=#339933]+[/COLOR][COLOR=#0000FF]".jpg"[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]File[/COLOR] file [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR][COLOR=#009900]([/COLOR]dir, fileName[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[B]if[/B] [COLOR=#009900]([/COLOR]file.[COLOR=#006633]exists[/COLOR] [COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] file.[COLOR=#006633]delete[/COLOR] [COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]

[B]try[/B] [COLOR=#009900]{[/COLOR]
    [COLOR=#003399]FileOutputStream[/COLOR] outStream [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]FileOutputStream[/COLOR][COLOR=#009900]([/COLOR]file[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#003399]InputStream[/COLOR] is[COLOR=#339933];[/COLOR]
    Bitmap bitmap[COLOR=#339933];[/COLOR]
    is [COLOR=#339933]=[/COLOR] [B]this[/B].[COLOR=#006633]getResources[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]openRawResource[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]drawable[/COLOR].[COLOR=#006633]image_1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    bitmap [COLOR=#339933]=[/COLOR] BitmapFactory.[COLOR=#006633]decodeStream[/COLOR][COLOR=#009900]([/COLOR]is[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [B]try[/B] [COLOR=#009900]{[/COLOR]
        is.[COLOR=#006633]close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        is [COLOR=#339933]=[/COLOR] [COLOR=#000066][B]null[/B][/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]IOException[/COLOR] e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    [COLOR=#009900]}[/COLOR]
    bitmap.[COLOR=#006633]compress[/COLOR][COLOR=#009900]([/COLOR]Bitmap.[COLOR=#006633]CompressFormat[/COLOR].[COLOR=#006633]JPEG[/COLOR], [COLOR=#CC66CC]90[/COLOR], outStream[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    outStream.[COLOR=#006633]flush[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    outStream.[COLOR=#006633]close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]FileNotFoundException[/COLOR] e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    e.[COLOR=#006633]printStackTrace[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]IOException[/COLOR] e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    e.[COLOR=#006633]printStackTrace[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR]   
Uri outputFileUri [COLOR=#339933]=[/COLOR] Uri.[COLOR=#006633]fromFile[/COLOR][COLOR=#009900]([/COLOR]file[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_SEND[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]addFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]addFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_GRANT_READ_URI_PERMISSION[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
intent.[COLOR=#006633]setType[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"image/jpeg"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]putExtra[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]EXTRA_STREAM[/COLOR], outputFileUri[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
startActivity[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]createChooser[/COLOR][COLOR=#009900]([/COLOR]intent, [COLOR=#0000FF]"Share this image via"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
علاوه بر استفاده از کدهای بالا، دقت شود که باید کدهای زیر درون AndroidManifest.xml پروژه اندروید نوشته شود (برای اجازه دادن برای ساخت فایل در حافظه خارجی و یا خواندن یک فایل از حافظه خارجی) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.WRITE_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.READ_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به اشتراک گذاری (share) یک فایل صوتی (مثلا mp3)، با استفاده از Intent ، در برنامه نویسی اندروید

به اشتراک گذاری (share) یک فایل صوتی (مثلا mp3)، با استفاده از Intent ، در برنامه نویسی اندروید

فرض کنید که یک فایل صوتی در حافظه خارجی (External Storage) داریم و می خواهیم آن را با برنامه های دیگر به اشتراک بگذاریم (share)، برای این منظور، در ادامه، کدهایی را ارائه خواهیم داد که بر اساس استفاده از Intent می باشند، اما نکته مهم این است که برای استفاده از این روش، حتما باید فایل در حافظه خارجی (External Storage) قرار داشته باشد و چنانچه فایل در حافظه داخلی (Internal Storage) قرار داشته باشد، ممکن است به برخی برنامه ها ارسال شود، اما به برخی برنامه های دیگر، ارسال نگردد. بنابراین حتی اگر فایل ها در حافظه داخلی (Internal Storage) قرار دارند، ابتدا باید یک کپی از آنها در حافظه خارجی (External Storage) قرار بدهیم و سپس از این کدها، برای به اشتراک گذاری آن استفاده کنیم.

با فرض اینکه فایل مورد نظرمان در پوشه ای (folder) با نام MyFolder قرار دارد (یعنی پوشه MyFolder که در حافظه خارجی است) و نام فایل صوتی برابر my_file.mp3 باشد، برای به اشتراک گذاری آن فایل صوتی با Intent ، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]File[/COLOR] root [COLOR=#339933]=[/COLOR] android.[COLOR=#006633]os[/COLOR].[COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[COLOR=#003399]File[/COLOR] dir [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR] [COLOR=#009900]([/COLOR]root.[COLOR=#006633]getAbsolutePath[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"/MyFolder"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]String[/COLOR] fileName [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"my_file.mp3"[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]File[/COLOR] file [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]File[/COLOR][COLOR=#009900]([/COLOR]dir, fileName[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
Uri outputFileUri [COLOR=#339933]=[/COLOR] Uri.[COLOR=#006633]fromFile[/COLOR][COLOR=#009900]([/COLOR]file[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_SEND[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]addFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]addFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_GRANT_READ_URI_PERMISSION[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
intent.[COLOR=#006633]setType[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"audio/*"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]putExtra[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]EXTRA_STREAM[/COLOR], outputFileUri[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
startActivity[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]createChooser[/COLOR][COLOR=#009900]([/COLOR]intent, [COLOR=#0000FF]"Share this image via"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
در کدهای بالا، root برابر مسیر پوشه (folder) اصلی حافظه خارجی (External Storage)، یعنی همان پوشه بندی اصلی گوشی، می باشد.

در خط زیر از کدها، تعیین کرده ایم که فایل مورد نظرمان، یک فایل صوتی می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]intent.[COLOR=#006633]setType[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"audio/*"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
علاوه بر استفاده از کدهای بالا، دقت شود که باید کدهای زیر درون AndroidManifest.xml پروژه اندروید نوشته شود (برای اجازه دادن برای ساخت فایل در حافظه خارجی و یا خواندن یک فایل از حافظه خارجی) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.WRITE_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.READ_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
افزودن امکان دریافت انواع اطلاعات (متن، عکس و ...) به اشتراک گذاری شده از برنامه های اندروید دیگر، به برنامه اندروید خود

افزودن امکان دریافت انواع اطلاعات (متن، عکس و ...) به اشتراک گذاری شده از برنامه های اندروید دیگر، به برنامه اندروید خود

حتما تابحال در برنامه های اندرویدی که متن، عکس و سایر اطلاعات را به اشتراک می گذارند، مشاهده کرده اید که هنگام انتخاب گزینه به اشتراک گذاری، تعدادی از برنامه های گوشی به صورت یک لیست نمایش داده می شوند. چنانچه بخواهیم که برنامه اندروید ما نیز در این فهرست ها نمایش داده شود باید کدهای زیر را در فایل AndroidManifest.xml پروژه اندروید کپی کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]action android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.action.SEND"[/COLOR] [COLOR=#339933]/>[/COLOR]
    [COLOR=#339933]<[/COLOR]category android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.category.DEFAULT"[/COLOR][COLOR=#339933]/>[/COLOR]
    [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"application/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
    [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"audio/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
    [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"image/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
    [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"message/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
    [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"multipart/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
    [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"text/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
    [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"video/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]</[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
دقت کنید که در کد بالا، انواع اطلاعات، مثل متن، عکس و ... در نظر گرفته شده است، اما اگر می خواهید که تنها تعدادی از آنها را به برنامه خود اضافه کنید، می توانید سایر موارد را حذف نمایید. هر تگ data برای یک نوع اطلاعات می باشد و نوع آن اطلاعات نیز پس از مشخصه mimeType نوشته شده است.

این کد باید درون تگ مربوط به آن activity نوشته شود که قرار است اطلاعات را دریافت کرده و پردازش های لازم (نمایش یا هر عمل دیگر) را بر روی اطلاعات انجام بدهد. اگر این کد درون تگ activity اصلی برنامه اندروید نوشته شود، آنگاه نام برنامه اندروید در لیست برنامه ها و در زیر آیکون برنامه (در لیست به اشتراک گذاری) نمایش داده می شود، اما اگر درون تگ یک activity غیر از activity اصلی بنویسیم، آنگاه عنوان (title) آن activity که معمولا در action bar نمایش داده می شود، در لیست برنامه ها نوشته خواهد شد. اگر بخواهیم که در هر صورت، یک عبارت واحد در زیر نام برنامه (درون لیست برنامه های به اشتراک گذاری) نمایش داده شود، باید عبارت مورد نظرمان را با مشخصه label به کدهای بالا اضافه کنیم. یعنی خط اول کدها را به صورت زیر تغییر می دهیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]intent[COLOR=#339933]-[/COLOR]filter android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"Share with my app"[/COLOR][COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
این تغییر، باعث می شود که وقتی برنامه اندروید ما در لیست به اشتراک گذاری نمایش داده می شود، عبارت Share with my app در زیر آیکون آن نوشته شود (شما می توانید این عبارت را به عبارت مورد نظر خود تغییر بدهید).

بنابراین، در کل، شیوه درج کدها درون کدهای activity ، مشابه کدهای زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]activity
    android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.package.name.ActivityName"[/COLOR]
    android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/title_activity"[/COLOR] [COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]intent[COLOR=#339933]-[/COLOR]filter android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"iran-eng"[/COLOR][COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]action android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.action.SEND"[/COLOR] [COLOR=#339933]/>[/COLOR]
        [COLOR=#339933]<[/COLOR]category android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.category.DEFAULT"[/COLOR][COLOR=#339933]/>[/COLOR]
        [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"application/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
        [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"audio/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
        [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"image/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
        [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"message/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
        [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"multipart/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
        [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"text/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
        [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]mimeType[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"video/*"[/COLOR] [COLOR=#339933]/>[/COLOR]
    [COLOR=#339933]</[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR]
[COLOR=#339933]</[/COLOR]activity[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
نکته :

شاید تاکنون مشاهده کرده باشید که هنگامی که در گوشی اندروید، بر روی یک لینک (آدرس URL) کلیک می کنیم، تعدادی برنامه اندروید نمایش داده می شود. این پنجره که در آن لیستی از برنامه ها نمایش داده می شود، دارای عنوان complete action using است (معمولا دارای این عنوان می باشد). ممکن است که شما فکر کنید که با کد بالا، می توانید برنامه مورد نظرتان را به آن لیست اضافه کنید، اما این تصور اشتباه است و باید کدهای دیگری نوشته شود که در مبحثی دیگر، آنها را شرح خواهیم داد.
با کد بالا، تنها می توان آدرس URL را به صورت متن دریافت کرد، اما با آن روش، آزادی عمل بیشتری داریم و حتی می توانیم انتخاب کنیم که تنها زمانی برنامه اندروید ما در لیست نمایش داده شود که آدرس URL متعلق به یک دامنه خاص (مثلا www.www.www.iran-eng.ir) باشد. البته کدها مشابه کدهای بالا است، اما به دلیل اهمیت آن، در مبحثی دیگر شرح داده می شود.

نکته :

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

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
افزودن امکان دریافت یک آدرس اینترنتی (آدرس URL) به اشتراک گذاری شده از برنامه های اندروید دیگر، به برنامه اندروید خود

افزودن امکان دریافت یک آدرس اینترنتی (آدرس URL) به اشتراک گذاری شده از برنامه های اندروید دیگر، به برنامه اندروید خود

افزودن امکان دریافت یک آدرس اینترنتی (آدرس URL) به اشتراک گذاری شده از برنامه های اندروید دیگر، به برنامه اندروید خود (با قابلیت نمایش برنامه، تنها برای یک دامنه خاص) و سپس پردازش بر روی URL ، در برنامه نویسی اندروید :


قبلا در مبحثی دیگر شرح دادیم که چگونه می توان امکان دریافت محتواهایی مثل متن، عکس و ... که توسط سایر برنامه های اندروید به اشتراک گذاشته می شود را به برنامه اندروید خود اضافه کنیم (با استفاده از intent-filter). در همان زمان گفتیم که با آن کدها، یک آدرس URL را تنها می توانیم به صورت متن دریافت نماییم. اما در این مبحث قصد داریم که این بار، امکانات دیگری را در مورد دریافت یک آدرس URL از دیگر برنامه ها شرح بدهیم.

زمانی که کاربر بر روی یک آدرس URL (آدرس اینترنتی - لینک) کلیک نماید، پنجره ای با عنوان complete action using باز می شود که شامل لیستی از برنامه هایی است که آدرس URL دریافت می کنند و ما می خواهیم برنامه اندروید ما نیز در آن لیست نمایش داده شود. حتی تعیین خواهیم کرد که تنها برای یک دامنه خاص (مثلا www.www.www.iran-eng.ir)، برنامه اندروید ما در لیست نمایش داده شود. این مورد مهم است، زیرا تعدادی از برنامه های اندروید، تنها برای دریافت URL از سایت مربوط به سازنده برنامه طراحی می شوند (نه دامنه مربوط به دیگر سایت ها).

برای این مورد نیز باید از intent-filter استفاده کنیم. باید کد زیر را به کدهای فایل AndroidManifest.xml پروژه اندروید اضافه کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]action android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.action.VIEW"[/COLOR][COLOR=#339933]></[/COLOR]action[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]category android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.category.DEFAULT"[/COLOR][COLOR=#339933]></[/COLOR]category[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]category android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.category.BROWSABLE"[/COLOR][COLOR=#339933]></[/COLOR]category[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]scheme[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http"[/COLOR] android[COLOR=#339933]:[/COLOR]host[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"www.www.www.iran-eng.ir"[/COLOR] [COLOR=#339933]></[/COLOR]data[COLOR=#339933]>[/COLOR]
[COLOR=#339933]</[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
همان طور که مشاهده می کنید، تعیین کرده ایم که تنها برای URL های مربوط به دامنه www.www.www.iran-eng.ir ، برنامه اندروید ما، در لیست نمایش داده شود.

این کد باید در میان تگ های آن activity قرار بگیرد که قرار است آدرس URL را دریافت کرده و عملیات های بعدی را بر اساس آن انجام بدهد.

اگر این کد درون تگ activity اصلی برنامه اندروید نوشته شود، آنگاه نام برنامه اندروید در لیست برنامه ها و در زیر آیکون برنامه (در لیست به اشتراک گذاری) نمایش داده می شود، اما اگر درون تگ یک activity غیر از activity اصلی بنویسیم، آنگاه عنوان (title) آن activity که معمولا در action bar نمایش داده می شود، در لیست برنامه ها نوشته خواهد شد. اگر بخواهیم که در هر صورت، یک عبارت واحد در زیر نام برنامه (درون لیست برنامه های به اشتراک گذاری) نمایش داده شود، باید عبارت مورد نظرمان را با مشخصه label به کدهای بالا اضافه کنیم. یعنی خط اول کدها را به صورت زیر تغییر می دهیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]intent[COLOR=#339933]-[/COLOR]filter android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"Share with my app"[/COLOR][COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
این تغییر، باعث می شود که وقتی برنامه اندروید ما در لیست به اشتراک گذاری نمایش داده می شود، عبارت Share with my app در زیر آیکون آن نوشته شود (شما می توانید این عبارت را به عبارت مورد نظر خود تغییر بدهید).

بنابراین، در کل، شیوه درج کدها درون کدهای activity ، مشابه کدهای زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]activity
    android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.package.name.ActivityName"[/COLOR]
    android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/title_activity"[/COLOR] [COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]intent[COLOR=#339933]-[/COLOR]filter android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"iran-eng"[/COLOR][COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]action android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.action.VIEW"[/COLOR][COLOR=#339933]></[/COLOR]action[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]category android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.category.DEFAULT"[/COLOR][COLOR=#339933]></[/COLOR]category[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]category android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.category.BROWSABLE"[/COLOR][COLOR=#339933]></[/COLOR]category[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]data android[COLOR=#339933]:[/COLOR]scheme[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http"[/COLOR] android[COLOR=#339933]:[/COLOR]host[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"www.www.www.iran-eng.ir"[/COLOR] [COLOR=#339933]></[/COLOR]data[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]</[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR]
[COLOR=#339933]</[/COLOR]activity[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
دریافت URL توسط activity و سپس پردازش بر روی آن :

با کدهایی که شرح دادیم، تنها امکان دریافت URL توسط یکی از activity های برنامه اندروید به وجود می آید، اما باید درون آن activity نیز کدهایی را بنویسیم تا URL را دریافت کرده و سپس برای پردازش های بعدی، آن را در اختیار داشته باشد. اگر تنها کدهای قبلی که شرح دادیم به برنامه افزوده شود، تنها activity مورد نظر باز می شود و عملا واکنشی در مورد مقدار URL ، از خود نشان نخواهد داد (مثلا همان محتویات گرافیکی خود را نمایش می دهد).

برای دریافت URL و ذخیره آن در یک رشته (string)، کدهای زیر را در activity می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]String[/COLOR] URL_string [COLOR=#339933]=[/COLOR] getIntent[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]getDataString[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
بنابراین آدرس URL را در یک رشته (string) با نام URL_string ذخیره کرده ایم و اکنون می توانیم پردازش های لازم را بر روی آن انجام بدهیم.

مثلا فرض کنید که در activity ، یک TextView با id برابر textView1 داریم و می خواهیم که آدرس URL توسط activity دریافت شده و سپس در TextView نمایش داده شود، برای این منظور، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]String[/COLOR] URL_string [COLOR=#339933]=[/COLOR] getIntent[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]getDataString[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
TextView tv [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR]TextView[COLOR=#009900])[/COLOR] findViewById[COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]textView1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
tv.[COLOR=#006633]setText[/COLOR][COLOR=#009900]([/COLOR]URL_string[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
نکته :

اگر قصد تست این روش را دارید و می خواهید بر روی یک لینک، آن را تست کنید، می توانید از برنامه اندروید QR Droid استفاده کنید، آن را بر روی گوشی اندروید خود نصب کرده و سپس با آن از یک کد QR که متناسب با یک آدرس URL است، عکس بگیرید تا نتیجه را به صورت یک لینک به شما نمایش بدهد. سپس با کلیک بر روی لینک، لیست برنامه ها نمایش داده می شود که برنامه شما هم باید در بین آنها باشد (این مورد را به این دلیل مثال زدم که معمولا کاربرد اصلی برای این آموزش می باشد و معمولا توسعه دهندگان، کدهای QR را به صورت عکس در سایت قرار می دهند تا کاربر از آنها عکس گرفته و سپس توسط نرم افزارهایی مثل QR Droid ، تبدیل به لینک شده و سپس توسط نرم افزار اصلی توسعه دهنده، پردازش شود).
 
بالا