مباحث عمومی در برنامه نویسی اندروید

P O U R I A

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

  1. تعیین کدهایی برای اجرا شدن در هنگام اشاره به دکمه بازگشت (Back) ، در برنامه اندروید
  2. پرسیدن اطمینان از خروج، هنگام اشاره به دکمه بازگشت (Back) ، در برنامه اندروید
  3. تغییر دادن آیکون (icon) پروژه اندروید، پس از ساخته شدن آن در برنامه eclipse ، در برنامه نویسی اندروید
  4. ساخت آیکون برای برنامه اندروید
  5. کد لازم برای خروج از برنامه اندروید، به گونه ای که در اجرای بعدی برنامه به اولین Activity برنامه اندروید (Activity اصلی) وارد شویم، نه آخرین Activity که در آن بوده ایم (با اشاره بر روی دکمه Back گوشی یا یک دکمه (Button) در لایه گرافیکی برنامه)
  6. کد لازم برای خروج از برنامه اندروید، به گونه ای که در اجرای بعدی برنامه به همان آخرین Activity که در آن بودیم وارد شویم (با اشاره بر روی دکمه Back گوشی یا یک دکمه (Button) در لایه گرافیکی برنامه)
  7. اجرای یک سری دستور، تنها یک بار (تنها در اولین اجرای برنامه، بعد از نصب برنامه اندروید)
  8. ایجاد امکان نصب برنامه اندروید بر روی حافظه خارجی گوشی (SD card) ، در برنامه نویسی اندروید
  9. آموزش نصب بسته های نرم افزاری جدید برای Android SDK Manager ، با وجود تحریم های شرکت گوگل برای ایرانیان
  10. چک کردن تهی بودن یا نبودن یک Uri ، در برنامه نویسی اندروید
  11. دسترسی به یک مقدار، به صورت سراسری (global) در تمامی Activity ها، در برنامه نویسی اندروید
  12. اجرای دستوراتی دیگر، در صورت بروز خطا، با try و catch ، در برنامه نویسی اندروید
  13. بازتولید (regenerate) کلاس R در پروژه اندروید، با گزینه Clean در برنامه eclipse
  14. نمایش پنجره مربوط به حذف (uninstall) یک برنامه اندروید نصب شده بر روی گوشی کاربر، با کدنویسی، در برنامه نویسی اندروید
  15. اجرای یک برنامه اندروید نصب شده بر روی گوشی کاربر، با کدنویسی، در برنامه نویسی اندروید
  16. دریافت نظر کاربران بر اساس تعداد ستاره، با استفاده از عنصر RatingBar ، در برنامه نویسی اندروید
  17. نمایش یک تعداد مشخص ستاره در RatingBar ، در برنامه نویسی اندروید
  18. تعیین یک عکس دلخواه برای نمایش به جای عکس ستاره پیش فرض RatingBar (و همچنین به عنوان راه حلی برای تعیین اندازه عکس RatingBar به صورت دلخواه) (ساخت RatingBar سفارشی (Custom RatingBar))، در برنامه نویسی اندروید
  19. نحوه وارد (import) کردن پروژه های اندروید شامل یک یا چند کتابخانه (library) به درون برنامه eclipse و تصحیح مسیرها برای رفع خطاهای ناشی از انتقال پروژه اندروید به کامپیوتر جدید
  20. معرفی روش های ساخت برنامه اندروید به صورت ((محتوا محور))، (جدا کردن محتوای اطلاعاتی برنامه اندروید و گرافیک آن) و بررسی معایب و مزیت های آنها
  21. ارسال پیامک (SMS) به گوشی یک فرد، در برنامه نویسی اندروید
  22. ارسال ایمیل (email) به ایمیل یک فرد، به وسیله برنامه های ارسال ایمیل به عنوان واسطه، در برنامه نویسی اندروید
  23. برقراری تماس تلفنی (phone call) با استفاده از برنامه اندروید، از طریق کدنویسی، در برنامه نویسی اندروید
  24. مشاهده و دسترسی به فایل های منبع (عکس، آهنگ و ...) موجود در یک فایل apk متعلق به یک برنامه اندروید
  25. Context چیست و چه نقشی در ساخت برنامه اندروید دارد ؟
  26. عدم استفاده از روش ArrayAdapter.addAll() (روش addAll برای متغیر از نوع ArrayAdapter) در نسخه های API پایین تر از 11 و جایگزینی روش ArrayAdapter.add() (روش add برای متغیر از نوع ArrayAdapter) به جای آن، برای جلوگیری از ایجاد Force Close ، در برنامه نویسی اندروید
  27. ذخیره اطلاعات بر اساس الگوی ((کلید-مقدار)) (key-value)، با استفاده از HashMap ، در برنامه نویسی اندروید
  28. معرفی کد USSD (برای پرداخت وجه، دریافت اطلاعات، ثبت اطلاعات و ...) و بیان روش هایی برای اجرای کدهای USSD در برنامه نویسی اندروید (به همراه ارائه یک پروژه اندروید)
  29. دانلود مستقیم بسته نرم افزاری Offline GDG Developer Kit (بسته ای کامل از ابزارها و آموزش های مرتبط با برنامه نویسی اندروید که توسط خود گوگل ارائه می شود)


منبع: kelidestan
 

P O U R I A

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

تعیین کدهایی برای اجرا شدن در هنگام اشاره به دکمه بازگشت (Back) ، در برنامه اندروید

معمولا وقتی کاربر بر روی دکمه back گوشی خود اشاره می کند، activity فعلی بسته شده و activity قبلی نمایش داده می شود (اگر activity اصلی باشد، از برنامه اندروید خارج می شود). اما ممکن است که بخواهیم به جای آن، یک سری کد اجرا گردد و عملیات های دیگری صورت گیرد.

برای این منظور، باید درون activity مورد نظرمان، کدهای زیر را بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]@Override
[B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onBackPressed[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]// your code[/I][/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
سپس باید به جای عبارت // your code ، کدهای مورد نظر خودمان را بنویسیم که دوست داریم، هنگام اشاره کاربر به دکمه back گوشی، آن کدها اجرا شوند.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
پرسیدن اطمینان از خروج، هنگام اشاره به دکمه بازگشت (Back) ، در برنامه اندروید

پرسیدن اطمینان از خروج، هنگام اشاره به دکمه بازگشت (Back) ، در برنامه اندروید

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

کدهای زیر، یک پیام به کاربر نمایش می دهد و از وی می پرسد که آیا واقعا می خواهد از برنامه خارج شود یا خیر، اگر کاربر جوابش مثبت باشد، از برنامه خارج می شود و اگر بر روی گزینه مربوط به خیر، اشاره کند، پیام بسته شده و در همان activity (ادامه اجرای آن) باقی می ماند :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]package[/B] [COLOR=#006699]com.iran-eng.example[/COLOR][COLOR=#339933];[/COLOR]
 
[B]import[/B] [COLOR=#006699]android.app.Activity[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.app.AlertDialog[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.content.DialogInterface[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.os.Bundle[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.Toast[/COLOR][COLOR=#339933];[/COLOR]
 
[B]public[/B] [B]class[/B] AndroidBackButtonActivity [B]extends[/B] Activity [COLOR=#009900]{[/COLOR]
 
    @Override
    [B]public[/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]main[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        Toast.[COLOR=#006633]makeText[/COLOR][COLOR=#009900]([/COLOR]getApplicationContext[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR],[COLOR=#0000FF]"http://www.www.www.iran-eng.ir"[/COLOR], Toast.[COLOR=#006633]LENGTH_LONG[/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]show[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
 
    @Override
    [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onBackPressed[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [COLOR=#666666][I]//Display alert message when back button has been pressed[/I][/COLOR]
        backButtonHandler[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [B]return[/B][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
 
    [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] backButtonHandler[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        AlertDialog.[COLOR=#006633]Builder[/COLOR] alertDialog [COLOR=#339933]=[/COLOR] [B]new[/B] AlertDialog.[COLOR=#006633]Builder[/COLOR][COLOR=#009900]([/COLOR]
                AndroidBackButtonActivity.[B]this[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#666666][I]// Setting Dialog Title[/I][/COLOR]
        alertDialog.[COLOR=#006633]setTitle[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Leave application?"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#666666][I]// Setting Dialog Message[/I][/COLOR]
        alertDialog.[COLOR=#006633]setMessage[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Are you sure you want to leave the application?"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#666666][I]// Setting Icon to Dialog[/I][/COLOR]
        alertDialog.[COLOR=#006633]setIcon[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]drawable[/COLOR].[COLOR=#006633]dialog_icon[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#666666][I]// Setting Positive "Yes" Button[/I][/COLOR]
        alertDialog.[COLOR=#006633]setPositiveButton[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"YES"[/COLOR],
                [B]new[/B] DialogInterface.[COLOR=#006633]OnClickListener[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                    [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onClick[COLOR=#009900]([/COLOR]DialogInterface dialog, [COLOR=#000066][B]int[/B][/COLOR] which[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                        finish[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                    [COLOR=#009900]}[/COLOR]
                [COLOR=#009900]}[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#666666][I]// Setting Negative "NO" Button[/I][/COLOR]
        alertDialog.[COLOR=#006633]setNegativeButton[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"NO"[/COLOR],
                [B]new[/B] DialogInterface.[COLOR=#006633]OnClickListener[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                    [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onClick[COLOR=#009900]([/COLOR]DialogInterface dialog, [COLOR=#000066][B]int[/B][/COLOR] which[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                        [COLOR=#666666][I]// Write your code here to invoke NO event[/I][/COLOR]
                        dialog.[COLOR=#006633]cancel[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                    [COLOR=#009900]}[/COLOR]
                [COLOR=#009900]}[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#666666][I]// Showing Alert Message[/I][/COLOR]
        alertDialog.[COLOR=#006633]show[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
منبع کدها :
android.programmerguru.com/how-to-change-the-back-button-behaviour
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تغییر دادن آیکون (icon) پروژه اندروید، پس از ساخته شدن آن در برنامه eclipse ، در برنامه نویسی اندروید

تغییر دادن آیکون (icon) پروژه اندروید، پس از ساخته شدن آن در برنامه eclipse ، در برنامه نویسی اندروید

قبلا در مباحثی دیگر، دو روش برای چگونگی ساخت آیکون (icon) برای پروژه اندروید، در برنامه eclipse ، را شرح دادیم. در یک روش، از یک تصویر انتخاب شده، با استفاده از نرم افزار Adobe PhotoShop ، تعدادی آیکون با اندازه های از پیش تعیین شده می ساختیم و هر کدام را در یکی از پوشه های drawable از پوشه بندی پروژه اندروید قرار می دادیم (برای هر پوشه، آیکون باید یک اندازه مشخص داشته باشد). روش دیگر هم، همان انتخاب یک تصویر به عنوان آیکون، در زمان ساخت پروژه اندروید است و کاملا بی دردسر است و تنها باید یک تصویر را انتخاب کنیم و خود برنامه eclipse ، آن را به اندازه های مختلف تبدیل کرده و در پوشه های drawable از پروژه اندروید، قرار می دهد. اکنون می خواهیم آموزش بدهیم که اگر بعد از ساخت پروژه اندروید، تصمیم گرفتیم که آیکون (icon) آن را تغییر بدهیم، به چه صورت باید عمل کنیم (زیرا می خواهیم مثل هنگام ساخت پروژه اندروید جدید، که بی دردسر یک آیکون می ساختیم، اکنون نیز به همان روش، آیکون را تغییر بدهیم).

ابتدا در برنامه eclipse ، فایل AndroidManifest.xml از پروژه اندروید را باز می کنیم :


android-294.jpg

این فایل به شکل زیر نمایش داده می شود :


android-295.jpg

بر روی تب (tab) با نام Application کلیک می کنیم تا صفحه زیر نمایش داده شود :


android-296.jpg

اکنون در جلوی گزینه Icon ، بر روی دکمه Browse کلیک می کنیم تا پنجره زیر نمایش داده شود :


android-297.jpg

بر روی گزینه Create New Icon کلیک می کنیم تا پنجره زیر نمایش داده شود :

android-298.jpg

بر روی دکمه Next کلیک می کنیم تا صفحه زیر نمایش داده شود :


android-299.jpg

بر روی گزینه Image کلیک می کنیم تا صفحه زیر نمایش داده شود :


android-300.jpg

در جلوی عبارت Image File ، بر روی گزینه Browse کلیک می کنیم و سپس در پنجره ای که باز می شود، فایل مربوط به عکس مورد نظرمان برای آیکون (icon) را انتخاب کرده و بر روی گزینه Open کلیک می کنیم. بنابراین عکس مورد نظر، در اندازه های مختلف نمایش داده می شود (البته برنامه eclipse ، یک مربع قرمز رنگ در پس زمینه آن قرار داده است) :


android-301.jpg

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


android-303.jpg

سپس بر روی گزینه Finish کلیک می کنیم، پنجره ای به شکل زیر نمایش داده می شود :


android-302.png


بر روی گزینه yes کلیک می کنیم. به تعداد فایل هایی که مربوط به آیکون (icon) در پروژه اندروید می باشند، این پنجره نمایش داده می شود و باید برای هر کدام، بر روی گزینه Yes کلیک کنید. بنابراین، تمامی فایل های مربوط به آیکون، تغییر داده می شوند و آیکون برنامه اندروید، برابر همان عکس انتخاب شده خواهد بود.
 

P O U R I A

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

ساخت آیکون برای برنامه اندروید

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

اولین توصیه این است که با نرم افزار حرفه ای Adobe PhotoShop ، آیکون برنامه اندروید خود را طراحی کنید و اندازه عکس را هم برابر 512 در 512 پیکسل انتخاب نمایید. اگر اندازه کوچکتری را انتخاب کنید، در آینده پشیمان خواهید شد، زیرا معمولا سایت های فروش برنامه های اندروید، آیکون برنامه را با اندازه 512 در 512 پیکسل، از شما درخواست خواهند کرد.

بنابراین با نرم افزار Adobe PhotoShop ، یک فایل با اندازه 512 در 512 بسازید و آیکون برنامه خود را در آن طراحی کنید. می توانید برای طراحی، از عکس های دیگر نیز استفاده کنید. پس از اتمام طراحی، فایل را با فرمت اصلی مخصوص نرم افزار Adobe PhotoShop در جایی ذخیره کنید و آن را برای همیشه در نزد خود نگه دارید. اکنون باید از این فایل اولیه، فایل هایی را که نیاز داریم، بسازیم.

روند کلی ساخت فایل ها به این صورت است که فایل اصلی مربوط به آیکون را توسط نرم افزار Adobe PhotoShop باز می کنیم. اگر نیاز به تغییر اندازه عکس می باشد، از منوی Image نرم افزار، گزینه Image Size را انتخاب کرده و در پنجره ای که باز می شود، اندازه عکس را تغییر می دهیم. اکنون باید عکس را به صورت فرمت مناسب، ذخیره کنیم، برای این منظور، از منوی File نرم افزار، گزینه Save for Web and Devices را انتخاب می کنیم. این گزینه در نرم افزار Adobe PhotoShop ، برای ساخت عکس های با حجم مناسب، برای اینترنت و برنامه های مختلف، می باشد. سپس فرمت عکس را برابر PNG-24 انتخاب می کنیم (اگر تعداد رنگ دیگری به شما توصیه شده، می توانید آن تعداد رنگ را انتخاب کنید، ولی نوع فایل، حتما PNG باشد، زیرا معمولا اینگونه است و سایت های فروشنده نیز، آیکون را به صورت فایل PNG از شما می خواهند). در مرحله آخر، عکس را ذخیره کنید (همیشه عکس ها را به صورت فایل های جدید ذخیره کنید و هرگز عکس اصلی با فرمت مخصوص نرم افزار Adobe PhotoShop را تغییر ندهید، شاید در آینده، آن را لازم داشته باشید).

خوب اکنون شرح می دهیم که به چه فایل هایی نیاز داریم و باید چه تعداد عکس، از آن فایل اولیه بسازیم. زمانی که ما یک پروژه اندروید در برنامه eclipse می سازیم، اگر تابحال هیچ آیکونی را برای آن تعیین نکرده باشیم، خود برنامه، یک آیکون را به طور پیش فرض، به صورت چندین فایل، درون فولدرهای پروژه اندروید، قرار داده است. محل این فایل ها را در شکل زیر نمایش داده ایم (به نام فولدرها دقت کنید) :

android-130.jpg

ما باید عکس های ساخته شده توسط خودمان را جایگزین عکس های نشان داده شده در شکل بالا کنیم. مشاهده می کنید که چهار تا از عکس ها، دارای نام ic_launcher.png می باشند. تفاوت این عکس ها، تنها در اندازه (بر حسب پیکسل) می باشد.

با توجه به شکل قبل، اکنون لیست عکس های مورد نیاز را در جدول زیر ذکر می کنیم :


مورد استفادهنام عکساندازه عکس (پیکسل)
ارسال برای سایت فروشنام دلخواه (معمولا)512 * 512
کپی در فولدر اصلی پروژه اندرویدic_launcher-web.png512 * 512
کپی در فولدر drawable-xxhdpi در پروژه اندرویدic_launcher.png144 * 144
کپی در فولدر drawable-xhdpi در پروژه اندرویدic_launcher.png96 * 96
کپی در فولدر drawable-hdpi در پروژه اندرویدic_launcher.png72 * 72
کپی در فولدر drawable-mdpi در پروژه اندرویدic_launcher.png48 * 48
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
کد لازم برای خروج از برنامه اندروید، به گونه ای که در اجرای بعدی برنامه به اولین Activity برنامه اندروید (Activity اصلی) وارد شویم

کد لازم برای خروج از برنامه اندروید، به گونه ای که در اجرای بعدی برنامه به اولین Activity برنامه اندروید (Activity اصلی) وارد شویم

کد لازم برای خروج از برنامه اندروید، به گونه ای که در اجرای بعدی برنامه به اولین Activity برنامه اندروید (Activity اصلی) وارد شویم، نه آخرین Activity که در آن بوده ایم (با اشاره بر روی دکمه Back گوشی یا یک دکمه (Button) در لایه گرافیکی برنامه) :

در این مبحث قصد داریم که کد لازم برای خروج از برنامه اندروید را شرح بدهیم. با اجرای این کد و بعد از خارج شدن از برنامه اندروید، در اجرای بعدی برنامه به اولین Activity برنامه اندروید (Activity اصلی) وارد می شویم، نه آخرین Activity که در آن بوده ایم. اگر قصد دارید که در اجرای دوباره برنامه اندروید، به همان آخرین Activity که در آن بوده ایم وارد شویم (نه اولین Activity)، پست بعدی را بخوانید.قبل از هر چیز، باید در روش onCreate از Activity اصلی برنامه اندروید (اولین Activity) کد زیر را بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]if[/B] [COLOR=#009900]([/COLOR]getIntent[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]getBooleanExtra[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"EXIT"[/COLOR], [COLOR=#000066][B]false[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    finish[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
کد بالا تعیین کرده است که اگر مقدار متناظر با EXIT و برابر true به این Activity ارسال شده ( تایپک کار با Activity ها ، در برنامه نویسی اندروید )، کد finish();اجرا شود که باعث می شود Activity اصلی برنامه اندروید، destroy شود (دیگر وجود نداشته باشد) و بنابراین اگر Activity دیگری از برنامه اندروید در پس زمینه وجود نداشته باشد، عملا از برنامه اندروید خارج می شویم.همان طور که گفتیم، کد بالا باید در روش onCreate از Activity اصلی اجرا شود، بنابراین اگر فرض کنیم که Activity اصلی دارای نام MainActivity باشد، باید کد آن مشابه کد زیر نوشته شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]package[/B] [COLOR=#006699]com.kelidestan.com[/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.os.Bundle[/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]
                
                [B]if[/B] [COLOR=#009900]([/COLOR]getIntent[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]getBooleanExtra[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"EXIT"[/COLOR], [COLOR=#000066][B]false[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                    finish[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                [COLOR=#009900]}[/COLOR]

        [COLOR=#009900]}[/COLOR]

[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
کدی که ذکر کردیم، در واقع بخش اول کدها بود که در Activity اصلی نوشته می شود، اما بخش دوم کدها باید در آن Activity که می خواهیم از برنامه اندروید خارج شویم، نوشته شود. بر اساس چگونگی خارج شدن از برنامه اندروید، دو حالت را در ادامه برای بخش دوم کدها شرح می دهیم. فقط قبل از آن، بهتر است در مورد اصل آن کدها توضیحاتی را بدهیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]@Override
[B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onBackPressed[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]getApplicationContext[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR], MainActivity.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]setFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_ACTIVITY_CLEAR_TOP[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]putExtra[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"EXIT"[/COLOR], [COLOR=#000066][B]true[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
در کدهای فوق، یک Intent ساخته ایم که برای رفتن به Activity اصلی (اولین Activity) به کار می رود (نام Activity اصلی را برابر MainActivity فرض کرده ایم). با روش putExtra ( تاپیک کار با Activity ها ، در برنامه نویسی اندروید ) ، مقدار متناظر با EXIT و برابر true ، به Activity اصلی ارسال می شود، بنابراین شرطی که با دستور if در Activity اصلی فرستادیم، صادق خواهد بود و بنابراین کد finish(); اجرا می شود. اما نکته مهم در این مرحله این است که تنها در صورتی از برنامه اندروید خارج می شویم که Activity دیگری در پس زمینه برنامه اندروید قرار نداشته باشد، بنابراین برای destroy کردن Activity هایی که بعد از Activity اصلی قرار دارند، یک FLAG با نام FLAG_ACTIVITY_CLEAR_TOP را برای Intent تعیین کرده ایم (فرض بر این است که در صف Activity هایی که در پس زمینه هستند، Activity اصلی، اولین می باشد، این مورد را از این لحاظ تذکر می دهیم که گاهی برنامه نویسان، در روش های onPause یا onStop از Activity ، کدی را برای destroy شدن آن به کار می برند یا اینکه برنامه به گونه ای است که Activity اصلی چندین بار در صف Activity ها قرار می گیرد، بنابراین اگر کد به درستی عمل نکرد، این موارد را نیز بررسی کنید ( تاپیک کار با Activity ها ، در برنامه نویسی اندروید )).

[h=2]خروج از برنامه اندروید، هنگام اشاره بر روی دکمه Back گوشی :[/h]همان طور که می دانید، اگر کاربر در activity اصلی، بر روی دکمه back گوشی، اشاره کند، آنگاه از برنامه اندروید خارج خواهد شد، اما ممکن است که بخواهیم در یک activity دیگر، اگر کاربر بر روی دکمه back اشاره کرد، نیز از برنامه اندروید خارج شود.

برای این منظور، درون activity ای که می خواهیم با دکمه back ، از برنامه خارج شود، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]@Override
[B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onBackPressed[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]getApplicationContext[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR], MainActivity.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    intent.[COLOR=#006633]setFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_ACTIVITY_CLEAR_TOP[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    intent.[COLOR=#006633]putExtra[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"EXIT"[/COLOR], [COLOR=#000066][B]true[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    startActivity[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
[h=2]خروج از برنامه اندروید، هنگام اشاره بر روی یک دکمه (Button) در لایه گرافیکی برنامه اندروید :[/h]فرض کنید که در لایه گرافیکی یک Activity از برنامه اندروید، یک دکمه (Button) داشته باشیم و بخواهیم که با اشاره کاربر بر روی آن، از برنامه اندروید خارج شود. برای این منظور، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]Button[/COLOR] b [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR][COLOR=#003399]Button[/COLOR][COLOR=#009900])[/COLOR] findViewById[COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]button1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
b.[COLOR=#006633]setOnClickListener[/COLOR][COLOR=#009900]([/COLOR][B]new[/B] OnClickListener[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                                   
    @Override
    [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onClick[COLOR=#009900]([/COLOR][COLOR=#003399]View[/COLOR] v[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]getApplicationContext[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR], MainActivity.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        intent.[COLOR=#006633]setFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_ACTIVITY_CLEAR_TOP[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        intent.[COLOR=#006633]putExtra[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"EXIT"[/COLOR], [COLOR=#000066][B]true[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        startActivity[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
[COLOR=#009900]}[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
در کد بالا، id مربوط به دکمه (Button) را برابر button1 در نظر گرفته ایم.
 

P O U R I A

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

کد لازم برای خروج از برنامه اندروید، به گونه ای که در اجرای بعدی برنامه به همان آخرین Activity که در آن بودیم وارد شویم

کد لازم برای خروج از برنامه اندروید، به گونه ای که در اجرای بعدی برنامه به همان آخرین Activity که در آن بودیم وارد شویم (با اشاره بر روی دکمه Back گوشی یا یک دکمه (Button) در لایه گرافیکی برنامه) :


در این مبحث قصد داریم که کد لازم برای خروج از برنامه اندروید را شرح بدهیم. البته کدی که ارائه می شود، به گونه ای است که وقتی از برنامه خارج شدیم، اگر دوباره برنامه اندروید را اجرا کنیم، وارد همان آخرین Activity خواهیم شد که در آن بوده ایم (نه اولین Activity برنامه اندروید). اگر قصد دارید که بعد از خروج از برنامه اندروید، اگر دوباره برنامه اندروید را اجرا کردیم، حتما اولین Activity اجرا شود (نه آخرین Activity که در آن بوده ایم)، پست قبل را بخوانید.

بخش اصلی کدها به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_MAIN[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]addCategory[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]CATEGORY_HOME[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]setFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_ACTIVITY_NEW_TASK[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
startActivity[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
یا اگر بخواهیم که از آخرین Activity خارج شده و به Activity یکی مانده به آخر رفته و سپس از برنامه خارج شویم (که باعث می شود با اجرای دوباره برنامه، به Activity یکی مانده به آخر وارد شویم)، باید کد finish(); را هم در ابتدای آن بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]finish[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_MAIN[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]addCategory[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]CATEGORY_HOME[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]setFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_ACTIVITY_NEW_TASK[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
startActivity[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
اکنون دو مورد را برای کد بالا شرح می دهیم (در صورت تمایل، کد finish(); را هم به آنها اضافه کنید، آن را به صورت توضیح در کدها قرار داده ایم) :

[h=2]خروج از برنامه اندروید، هنگام اشاره بر روی دکمه Back گوشی :[/h]همان طور که می دانید، اگر کاربر در activity اصلی، بر روی دکمه back گوشی، اشاره کند، آنگاه از برنامه اندروید خارج خواهد شد، اما ممکن است که بخواهیم در یک activity دیگر، اگر کاربر بر روی دکمه back اشاره کرد، نیز از برنامه اندروید خارج شود.

برای این منظور، درون activity ای که می خواهیم با دکمه back ، از برنامه خارج شود، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]@Override
[B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onBackPressed[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]// this.finish();[/I][/COLOR]
    Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_MAIN[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    intent.[COLOR=#006633]addCategory[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]CATEGORY_HOME[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    intent.[COLOR=#006633]setFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_ACTIVITY_NEW_TASK[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    startActivity[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
[h=2]خروج از برنامه اندروید، هنگام اشاره بر روی یک دکمه (Button) در لایه گرافیکی برنامه اندروید :[/h]فرض کنید که در لایه گرافیکی یک Activity از برنامه اندروید، یک دکمه (Button) داشته باشیم و بخواهیم که با اشاره کاربر بر روی آن، از برنامه اندروید خارج شود. برای این منظور، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]Button[/COLOR] b [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR][COLOR=#003399]Button[/COLOR][COLOR=#009900])[/COLOR] findViewById[COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]button1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
b.[COLOR=#006633]setOnClickListener[/COLOR][COLOR=#009900]([/COLOR][B]new[/B] OnClickListener[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                                   
    @Override
    [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onClick[COLOR=#009900]([/COLOR][COLOR=#003399]View[/COLOR] v[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [COLOR=#666666][I]// finish();[/I][/COLOR]
        Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_MAIN[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        intent.[COLOR=#006633]addCategory[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]CATEGORY_HOME[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        intent.[COLOR=#006633]setFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_ACTIVITY_NEW_TASK[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        startActivity[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
[COLOR=#009900]}[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
در کد بالا، id مربوط به دکمه (Button) را برابر button1 در نظر گرفته ایم.
 

P O U R I A

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

اجرای یک سری دستور، تنها یک بار (تنها در اولین اجرای برنامه، بعد از نصب برنامه اندروید)

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

روشی که ما به کار می بریم، بر اساس SharedPreferences می باشد.

ابتدا یک کلاس با نام Prefs می سازیم (ساخت فایل Prefs.java). این کلاس باید حاوی کدهای زیر باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]public[/B] [B]class[/B] Prefs [B]extends[/B] PreferenceActivity [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]
            SharedPreferences prefs [COLOR=#339933]=[/COLOR] PreferenceManager.[COLOR=#006633]getDefaultSharedPreferences[/COLOR][COLOR=#009900]([/COLOR][B]this[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
            [COLOR=#003399]Boolean[/COLOR] b [COLOR=#339933]=[/COLOR] prefs.[COLOR=#006633]getBoolean[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"FIRSTRUN"[/COLOR], [COLOR=#000066][B]true[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]

[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
سپس باید فایل AndroidManifest.xml را باز کرده و خط زیر را به آن اضافه کنیم (بعد از آخرین تگ activity) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]activity android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]".Prefs"[/COLOR][COLOR=#339933]></[/COLOR]activity[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
اکنون، در آن activity که قصد داریم، یک سری دستور، تنها یک مرتبه اجرا شوند، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]final[/B] SharedPreferences shared [COLOR=#339933]=[/COLOR] getSharedPreferences[COLOR=#009900]([/COLOR][COLOR=#0000FF]"Prefs"[/COLOR], MODE_PRIVATE[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[B]final[/B] SharedPreferences.[COLOR=#006633]Editor[/COLOR] editor [COLOR=#339933]=[/COLOR] shared.[COLOR=#006633]edit[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#000066][B]boolean[/B][/COLOR] isFirstRun [COLOR=#339933]=[/COLOR] shared.[COLOR=#006633]getBoolean[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"FIRSTRUN"[/COLOR], [COLOR=#000066][B]true[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[B]if[/B] [COLOR=#009900]([/COLOR]isFirstRun[COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]// Code to run once[/I][/COLOR]
    editor.[COLOR=#006633]putBoolean[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"FIRSTRUN"[/COLOR], [COLOR=#000066][B]false[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    editor.[COLOR=#006633]commit[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]    
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
سپس کدهایی که می خواهید تنها یک بار اجرا شوند را به جای عبارت // Code to run once بنویسید.

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

دقت داشته باشید که به جای editor.commit(); می توان از editor.apply(); استفاده نمود، این گزینه دوم، در برخی موارد که چندین بار، در یک activity ، از SharedPreferences مقدار خوانده و در آن نوشته ایم، می تواند عملکرد مورد نظر ما را صحیح تر اجرا کند. انتخاب بین این دو، بستگی به کدهای activity دارد. شما ابتدا از editor.commit(); استفاده کنید و اگر مشاهده کردید که مقادیر جدیدی که در SharedPreferences ذخیره می کنید، جایگزین مقادیر قبلی نشده اند، آنگاه از editor.apply(); استفاده نمایید. دقت داشته باشید که برای استفاده از editor.apply(); باید حداقل شماره minSdkVersion در فایل AndroidManifest.xml را به 9 تغییر دهید که باعث می شود، برخی گوشی ها با برنامه شما سازگار نباشند.

[h=4]نکته :[/h]اگر با پیام خطایی مبنی بر عدم شناسایی MODE_PRIVATE مواجه شدید، آن خط از کدها را مشابه کد زیر بنویسید :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]final[/B] SharedPreferences shared [COLOR=#339933]=[/COLOR] getActivity[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]getSharedPreferences[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Prefs"[/COLOR], [COLOR=#003399]Context[/COLOR].[COLOR=#006633]MODE_PRIVATE[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
یا به شکل زیر :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]final[/B] SharedPreferences shared [COLOR=#339933]=[/COLOR] myContext.[COLOR=#006633]getSharedPreferences[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Prefs"[/COLOR], [COLOR=#003399]Context[/COLOR].[COLOR=#006633]MODE_PRIVATE[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
در کد بالا، myContext را باید به شکل صحیح بسازیم (از جنس Context).
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
ایجاد امکان نصب برنامه اندروید بر روی حافظه خارجی گوشی (SD card) ، در برنامه نویسی اندروید

ایجاد امکان نصب برنامه اندروید بر روی حافظه خارجی گوشی (SD card) ، در برنامه نویسی اندروید

پس از آنکه شما یک پروژه اندروید را در برنامه eclipse می سازید، به طور پیش فرض، برنامه به گونه ای است که بر روی حافظه داخلی گوشی نصب می شود. برای تغییر این پیش فرض و به وجود آوردن امکان نصب برنامه اندروید بر روی حافظه خارجی گوشی (SD card)، باید فایل AndroidManifest.xml در پروژه اندروید را باز کرده و سپس مشخصه android:installLocation را به صورت preferExternal تعیین نماییم، یعنی همانند شکل کلی زیر :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]manifest xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/COLOR]
    android[COLOR=#339933]:[/COLOR]installLocation[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"preferExternal"[/COLOR]
    ... [COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

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

چک کردن تهی بودن یا نبودن یک Uri ، در برنامه نویسی اندروید

فرض کنید که برای یک فایل، یک Uri تعریف کرده ایم و اکنون قصد داریم که ببینیم Uri درست تعریف شده یا نه و یا اینکه اصلا فایل وجود دارد یا خیر. برای این منظور، می توانیم ابتدا چک کنیم که آیا Uri تهی است یا خیر و سپس اگر تهی نبود، یک پیام به مدت چند ثانیه نمایش داده شود (این مورد برای تست برنامه نویسی می تواند به کار رود). با فرض اینکه Uri دارای نام my_Uri باشد، برای این منظور، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]if[/B][COLOR=#009900]([/COLOR]my_Uri [COLOR=#339933]!=[/COLOR] [COLOR=#000066][B]null[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
    Toast.[COLOR=#006633]makeText[/COLOR][COLOR=#009900]([/COLOR]getApplicationContext[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR], [COLOR=#0000FF]"Uri is Correct !"[/COLOR], Toast.[COLOR=#006633]LENGTH_SHORT[/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]show[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
با اجرای کد بالا، اگر Uri صحیح باشد، پیام Uri is Correct ! به مدت چند ثانیه نمایش داده می شود.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
دسترسی به یک مقدار، به صورت سراسری (global) در تمامی Activity ها، در برنامه نویسی اندروید

دسترسی به یک مقدار، به صورت سراسری (global) در تمامی Activity ها، در برنامه نویسی اندروید

همان طور که می دانید، معمولا متغیرها را در یک Activity که به کار می روند، تعریف کرده و سپس مقادیر مورد نظرمان را در آنها ذخیره می کنیم، اما گاهی نیاز داریم که به یک مقدار، در تمام Activity ها دسترسی داشته باشیم، یعنی نیازی نباشد که آن را در تک تک Activity ها تعریف کنیم، بلکه آن را تنها در یک کلاس (class) تعریف کرده و سپس آن را در Activity های مختلف، از کلاس (class) فراخوانی کنیم. بنابراین اگر بخواهیم آن مقدار خاص را تغییر بدهیم، تنها باید کدهای آن کلاس (class) را تغییر بدهیم.

ابتدا متغیرهایی که می خواهیم به صورت سراسری (global) تعریف شوند را در یک کلاس (class) با نام Globals تعریف می کنیم (مثلا با کد زیر، متغیر با نام myText در آن تعریف می کنیم) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]public[/B] [B]class[/B] Globals [B]extends[/B] Application [COLOR=#009900]{[/COLOR]

    [B]public[/B] [COLOR=#003399]String[/COLOR] myText [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"text"[/COLOR][COLOR=#339933];[/COLOR]

[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
اکنون اگر بخواهیم درون یک Activity (یا یک کلاس) دلخواه، مقدار آن متغیر را فراخوانی کنیم، باید کدهای زیر را بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Globals global [COLOR=#339933]=[/COLOR] [B]new[/B] Globals[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]String[/COLOR] mt [COLOR=#339933]=[/COLOR] global.[COLOR=#006633]myText[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
اجرای دستوراتی دیگر، در صورت بروز خطا، با try و catch ، در برنامه نویسی اندروید

اجرای دستوراتی دیگر، در صورت بروز خطا، با try و catch ، در برنامه نویسی اندروید

معمولا در اجرای برخی کدها (دستورها)، ممکن است یک سری خطاها به وجود بیاید که باید آنها را پیش بینی کنیم. ایجاد خطا می تواند باعث force close (یعنی بسته شدن برنامه اندروید) شود. بنابراین با ترکیب try و catch می توانیم تعیین کنیم که در صورت ایجاد خطا در اجرای یک سری دستور، به جای آنها، دستوراتی دیگر اجرا گردد. برای این نوع کدنویسی، می توان Exception های مختلفی را در نظر گرفت، شکل کلی این نوع کدنویسی، به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]try[/B] [COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]// first commands[/I][/COLOR]
[COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]Exception[/COLOR] e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]//  second commands[/I][/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نکته :[/h]دقت شود که می توانیم برای catch هیچ دستوری تعریف نکنیم (این شیوه، برای زمانی به کار می رود که تنها بخواهیم در صورت بروز خطا در اجرای دستوراتمان، مشکلی در اجرای برنامه پیش نیاید، یعنی force close ایجاد نشود). بنابراین در این موارد، می توان کدها را به صورت زیر نوشت :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]try[/B] [COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]// commands[/I][/COLOR]
[COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]Exception[/COLOR] e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
که در آن به جای عیارت // commands ، باید کدهای مورد نظرمان را بنویسیم.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
بازتولید (regenerate) کلاس R در پروژه اندروید، با گزینه Clean در برنامه eclipse

بازتولید (regenerate) کلاس R در پروژه اندروید، با گزینه Clean در برنامه eclipse

گاهی اوقات ممکن است با خطاهایی در مورد کلاس R (فایل R.java) در پروژه اندروید روبرو شویم که تنها راه حل آن، بازتولید (regenerate) کلاس R باشد. بنابراین باید برای رفع خطا، کلاس R را دوباره بسازیم. یا اینکه به هر دلیلی، کلاس R حذف شده است و بنابراین نیاز داریم دوباره آن را بسازیم.

قبل از هر چیز، تذکر بدهم که گاهی استفاده از گزینه Clean در برنامه eclipse ، باعث حذف کامل فایل R.java می شود و برای دوباره ساختن آن، نیاز به برطرف کردن تعدادی خطا می باشد. بنابراین ابتدا از کل پروژه اندروید خود، یک کپی در محلی امن ذخیره کنید تا در صورت برخورد با این مشکل و عدم موفقیت در بازتولید فایل R.java ، آن نسخه اصلی را به درون برنامه eclipse ، وارد (import) کنید. اکنون در ادامه می خواهیم که مراحل بازتولید فایل R.java را شرح بدهیم.

برای بازتولید کلاس R ، چند مرحله را باید انجام بدهید. ابتدا چک کنید که آیا کد زیر در ابتدای کدها وجود دارد یا خیر (در ابتدای کدهای Activity و ...) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]import[/B] [COLOR=#006699]android.R[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
اگر وجود دارد، باید آن را حذف کنید.

سپس باید چک کنیم که در پنجره Problems هیچ خطایی نمایش داده نشده باشد، اگر خطایی وجود دارد، باید آنها را برطرف کنیم (خطاهای مربوط به فایل های xml)(البته برخی خطاها موثر نیستند و ابتدا می توانید بدون برطرف کردن خطاها سایر مراحل را انجام بدهید، اگر فایل R.java ساخته نشد، آنگاه خطاها را برطرف کنید). مثلا عبارت های ایجاد کننده خطا که مربوط به فایل های xml هستند را می توانید به طور موقت، تبدیل به توضیح (comment) کنید. اگر پنجره Problems در برنامه eclipse نمایش داده نشده است، از منوی Window ، گزینه Show view و سپس گزینه Problems را انتخاب کنید تا پنجره Problems نمایش داده شود.

سپس باید در برنامه eclipse ، از منوی Project ، گزینه Clean را انتخاب کنیم تا پنجره ای به شکل زیر باز شود :

android-253.jpg

در این پنجره باید چک کنیم که پروژه مورد نظرمان انتخاب شده باشد، آنگاه بر روی گزینه OK کلیک می کنیم. فایل R.java ساخته خواهد شد :


android-254.jpg

[h=4]نکته :[/h]گاهی دیده می شود که برخی از فایل هایی که در زیرمجموعه پوشه res و یا زیرپوشه های آن قرار می گیرند، ممکن است در بازتولید فایل R.java ، اختلال ایجاد کنند و این فایل ساخته نشود. مثلا ممکن است فایلی با نام MyFile.png را شما در پوشه بندی پروژه کپی کنید و برنامه eclipse خطا بدهد و اعلام کند که نام فایل صحیح نیست و با تغییر نام به my_file.png ممکن است دیگر خطا ندهد. بنابراین اینگونه موارد نیز گاهی به وجود می آید و به آنها نیز توجه داشته باشید.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
نمایش پنجره مربوط به حذف (uninstall) یک برنامه اندروید نصب شده بر روی گوشی کاربر، با کدنویسی، در برنامه نویسی اندروید

نمایش پنجره مربوط به حذف (uninstall) یک برنامه اندروید نصب شده بر روی گوشی کاربر، با کدنویسی، در برنامه نویسی اندروید

ساده ترین کد برای نمایش گزینه ای برای انتخاب حذف (uninstall) یک برنامه نصب شده بر روی گوشی کاربر، به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_DELETE[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]setData[/COLOR][COLOR=#009900]([/COLOR]Uri.[COLOR=#006633]parse[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"package:"[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"com.iran-eng.package"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
startActivity[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
که در آن، نام package مربوط به برنامه اندروید را به صورت زیر در نظر گرفته ایم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]com.[COLOR=#006633]iran-eng[/COLOR].[B]package[/B][/FONT]
[/FONT][/COLOR]
با اجرای این کد، در یک پنجره جدید، از کاربر پرسیده می شود که آیا واقعا می خواهد آن برنامه را حذف (uninstall) کند یا خیر.
 

P O U R I A

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

اجرای یک برنامه اندروید نصب شده بر روی گوشی کاربر، با کدنویسی، در برنامه نویسی اندروید

فرض کنید که یک برنامه اندروید بر روی گوشی کاربر نصب است و قصد داریم که کاربر وقتی در برنامه اندروید ما، مثلا بر روی یک دکمه (Button) اشاره می کند، آنگاه آن برنامه اندروید اجرا شود و کاربر آن را ببیند. در این مبحث قصد داریم که کدهای لازم برای این منظور را شرح بدهیم.نام package برنامه اندرویدی که می خواهیم اجرا گردد را به صورت زیر در نظر می گیریم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]com.[COLOR=#006633]iran-eng[/COLOR].[B]package[/B][/FONT]
[/FONT][/COLOR]
بنابراین برای اجرای آن برنامه اندروید، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]try[/B] [COLOR=#009900]{[/COLOR]
    PackageManager packageManager [COLOR=#339933]=[/COLOR] getPackageManager[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    Intent intent [COLOR=#339933]=[/COLOR] packageManager.[COLOR=#006633]getLaunchIntentForPackage[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"com.iran-eng.package"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [B]if[/B] [COLOR=#009900]([/COLOR][COLOR=#000066][B]null[/B][/COLOR] [COLOR=#339933]!=[/COLOR] intent[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        startActivity[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
[COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR]ActivityNotFoundException e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]// default message[/I][/COLOR]
[COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR][COLOR=#003399]Exception[/COLOR] e[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]// default message[/I][/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
دریافت نظر کاربران بر اساس تعداد ستاره، با استفاده از عنصر RatingBar ، در برنامه نویسی اندروید

دریافت نظر کاربران بر اساس تعداد ستاره، با استفاده از عنصر RatingBar ، در برنامه نویسی اندروید

در این مبحث قصد داریم که یک برنامه اندروید بسازیم که نظر کاربران را بر اساس تعداد ستاره، دریافت کرده و نمایش می دهد. برای این منظور، از عنصر RatingBar استفاده خواهیم کرد :


android-332.jpg

android-333.jpg

هنگام انتخاب یک رتبه (تعداد ستاره) توسط کاربر، عدد مربوط به انتخاب کاربر در یک TextView نمایش داده می شود، علاوه بر این، یک Button تعریف خواهیم کرد که وقتی بر روی آن اشاره می کنیم، انتخاب کاربر، به صورت یک پیام کوتاه، نمایش داده می شود (با استفاده از روش Toast.makeText).
در برنامه eclipse ، ابتدا یک پروژه اندروید با نام RatingBar می سازیم (نام package را برابر com.kelidestan.ratingbar انتخاب می کنیم. نام Activity اصلی را برابر MainActivity انتخاب می کنیم و فایل xml متناظر آن را هم برابر activity_main قرار می دهیم) :

هنگام انتخاب یک رتبه (تعداد ستاره) توسط کاربر، عدد مربوط به انتخاب کاربر در یک TextView نمایش داده می شود، علاوه بر این، یک Button تعریف خواهیم کرد که وقتی بر روی آن اشاره می کنیم، انتخاب کاربر، به صورت یک پیام کوتاه، نمایش داده می شود (با استفاده از روش Toast.makeText).
در برنامه eclipse ، ابتدا یک پروژه اندروید با نام RatingBar می سازیم (نام package را برابر com.kelidestan.ratingbar انتخاب می کنیم. نام Activity اصلی را برابر MainActivity انتخاب می کنیم و فایل xml متناظر آن را هم برابر activity_main قرار می دهیم) :

android-334.jpg

در فایل activity_main.xml ، کدهای زیر را می نویسیم :
کد:
[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]
    android[COLOR=#339933]:[/COLOR]layout_width[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"fill_parent"[/COLOR]
    android[COLOR=#339933]:[/COLOR]layout_height[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"fill_parent"[/COLOR]
    android[COLOR=#339933]:[/COLOR]orientation[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"vertical"[/COLOR] [COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR]TextView
        android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/lblRateMe"[/COLOR]
        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]"Rate Me"[/COLOR]
        android[COLOR=#339933]:[/COLOR]textAppearance[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"?android:attr/textAppearanceMedium"[/COLOR] [COLOR=#339933]/>[/COLOR]
 
    [COLOR=#339933]<[/COLOR]RatingBar
        android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/ratingBar"[/COLOR]
        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]numStars[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"5"[/COLOR]
        android[COLOR=#339933]:[/COLOR]stepSize[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR]
        android[COLOR=#339933]:[/COLOR]rating[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"0.0"[/COLOR] [COLOR=#339933]/>[/COLOR]
 
    [COLOR=#339933]<[/COLOR][COLOR=#003399]Button[/COLOR]
        android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/btnSubmit"[/COLOR]
        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]"Submit"[/COLOR] [COLOR=#339933]/>[/COLOR]
 
    [COLOR=#339933]<[/COLOR]LinearLayout
        android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/linearLayout1"[/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] [COLOR=#339933]>[/COLOR]
 
        [COLOR=#339933]<[/COLOR]TextView
            android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/lblResult"[/COLOR]
            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]"Result : "[/COLOR]
            android[COLOR=#339933]:[/COLOR]textAppearance[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"?android:attr/textAppearanceLarge"[/COLOR] [COLOR=#339933]/>[/COLOR]
 
        [COLOR=#339933]<[/COLOR]TextView
            android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/txtRatingValue"[/COLOR]
            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]""[/COLOR]
            android[COLOR=#339933]:[/COLOR]textAppearance[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"?android:attr/textAppearanceSmall"[/COLOR] [COLOR=#339933]/>[/COLOR]
 
    [COLOR=#339933]</[/COLOR]LinearLayout[COLOR=#339933]>[/COLOR]
    
[COLOR=#339933]</[/COLOR]LinearLayout[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
دقت شود که تعداد ستاره هایی که می خواهیم برای عنصر RatingBar نمایش داده شود را باید در مشخصه numStars از RatingBar تعیین کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]android[COLOR=#339933]:[/COLOR]numStars[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"5"[/COLOR][/FONT]
[/FONT][/COLOR]
همچنین رتبه ای (تعداد ستاره) که در ابتدا به صورت پیش فرض به کاربر نمایش داده می شود، توسط مشخصه rating تعیین می شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]android[COLOR=#339933]:[/COLOR]rating[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"0.0"[/COLOR][/FONT]
[/FONT][/COLOR]
بنابراین شکل گرافیکی فایل activity_main.xml به صورت زیر خواهد بود :

android-335.jpg

اکنون کدهای فایل MainActivity.java را به صورت زیر می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]package[/B] [COLOR=#006699]com.kelidestan.ratingbar[/COLOR][COLOR=#339933];[/COLOR]

[B]import[/B] [COLOR=#006699]android.app.Activity[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.os.Bundle[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.View[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.View.OnClickListener[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.Button[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.RatingBar[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.RatingBar.OnRatingBarChangeListener[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.TextView[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.Toast[/COLOR][COLOR=#339933];[/COLOR]

[B]public[/B] [B]class[/B] MainActivity [B]extends[/B] Activity [COLOR=#009900]{[/COLOR]
        
        [B]public[/B] RatingBar ratingBar[COLOR=#339933];[/COLOR]
        [B]public[/B] TextView txtRatingValue[COLOR=#339933];[/COLOR]
        [B]public[/B] [COLOR=#003399]Button[/COLOR] btnSubmit[COLOR=#339933];[/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]
                
                addListenerOnRatingBar[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                addListenerOnButton[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]

    
        [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] addListenerOnRatingBar[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                 
                ratingBar [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR]RatingBar[COLOR=#009900])[/COLOR] findViewById[COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]ratingBar[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                txtRatingValue [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR]TextView[COLOR=#009900])[/COLOR] findViewById[COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]txtRatingValue[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
         
                [COLOR=#666666][I]//if rating value is changed,[/I][/COLOR]
                [COLOR=#666666][I]//display the current rating value in the result (textview) automatically[/I][/COLOR]
                ratingBar.[COLOR=#006633]setOnRatingBarChangeListener[/COLOR][COLOR=#009900]([/COLOR][B]new[/B] OnRatingBarChangeListener[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                        [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onRatingChanged[COLOR=#009900]([/COLOR]RatingBar ratingBar, [COLOR=#000066][B]float[/B][/COLOR] rating,
                                [COLOR=#000066][B]boolean[/B][/COLOR] fromUser[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
         
                                txtRatingValue.[COLOR=#006633]setText[/COLOR][COLOR=#009900]([/COLOR][COLOR=#003399]String[/COLOR].[COLOR=#006633]valueOf[/COLOR][COLOR=#009900]([/COLOR]rating[COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
         
                        [COLOR=#009900]}[/COLOR]
                [COLOR=#009900]}[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
          [COLOR=#009900]}[/COLOR]
         
          [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] addListenerOnButton[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
         
                ratingBar [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR]RatingBar[COLOR=#009900])[/COLOR] findViewById[COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]ratingBar[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                btnSubmit [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR][COLOR=#003399]Button[/COLOR][COLOR=#009900])[/COLOR] findViewById[COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]btnSubmit[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
         
                [COLOR=#666666][I]//if click on me, then display the current rating value.[/I][/COLOR]
                btnSubmit.[COLOR=#006633]setOnClickListener[/COLOR][COLOR=#009900]([/COLOR][B]new[/B] OnClickListener[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
         
                        @Override
                        [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onClick[COLOR=#009900]([/COLOR][COLOR=#003399]View[/COLOR] v[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
         
                                Toast.[COLOR=#006633]makeText[/COLOR][COLOR=#009900]([/COLOR]MainActivity.[B]this[/B],
                                                       [COLOR=#003399]String[/COLOR].[COLOR=#006633]valueOf[/COLOR][COLOR=#009900]([/COLOR]ratingBar.[COLOR=#006633]getRating[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR],
                                                       Toast.[COLOR=#006633]LENGTH_SHORT[/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]show[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
         
                        [COLOR=#009900]}[/COLOR]
         
                [COLOR=#009900]}[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
         
          [COLOR=#009900]}[/COLOR]

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

android-336.jpg

چون تعداد ستاره ها را به صورت پیش فرض، برابر 0 انتخاب کردیم، بنابراین هیچ ستاره ای در RatingBar به صورت رنگی نمایش داده نشده است. اکنون بر روی ستاره دوم اشاره می کنیم :


android-337.jpg

مشاهده می کنید که دو ستاره رنگی شده است و در TextView ، مقدار 2 نمایش داده شده است. اکنون بر روی Button کلیک می کنیم :


android-338.jpg

یک پیام کوتاه که دارای عنوان 2.0 است، به مدت چند ثانیه، نمایش داده می شود.

کدهای این پروژه اندروید، بر اساس منبع زیر می باشد :
mkyong.com/android/android-rating-bar-example​

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

پیوست ها

  • 132.zip
    928.9 کیلوبایت · بازدیدها: 0
  • 133.rar
    258.8 کیلوبایت · بازدیدها: 0

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
نمایش یک تعداد مشخص ستاره در RatingBar ، در برنامه نویسی اندروید

نمایش یک تعداد مشخص ستاره در RatingBar ، در برنامه نویسی اندروید

فرض کنید که یک RatingBar داریم و می خواهیم یک تعداد مشخص ستاره در آن نمایش داده شود، برای این منظور، کدهای زیر را می نویسیم (تعداد 2 ستاره را در نظر گرفته ایم) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]String[/COLOR] number_of_stars [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"2"[/COLOR][COLOR=#339933];[/COLOR]
RatingBar ratingBar [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR]RatingBar[COLOR=#009900])[/COLOR] findViewById[COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]ratingBar1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
ratingBar.[COLOR=#006633]setRating[/COLOR][COLOR=#009900]([/COLOR][COLOR=#003399]Float[/COLOR].[COLOR=#006633]parseFloat[/COLOR][COLOR=#009900]([/COLOR]number_of_stars[COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
در کدهای بالا، id مربوط به RatingBar را برابر ratingBar1 در نظر گرفته ایم.
 

P O U R I A

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

تعیین یک عکس دلخواه برای نمایش به جای عکس ستاره پیش فرض RatingBar

تعیین یک عکس دلخواه برای نمایش به جای عکس ستاره پیش فرض RatingBar (و همچنین به عنوان راه حلی برای تعیین اندازه عکس RatingBar به صورت دلخواه) (ساخت RatingBar سفارشی (Custom RatingBar))، در برنامه نویسی اندروید :


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

1- ابتدا باید دو عکس برای دو حالت ستاره به صورت خالی و ستاره به صورت پر را داشته باشیم که قرار است جایگزینی برای عکس های پیش فرض RatingBar معمولی باشند. نام آن دو عکس را به صورت زیر انتخاب می کنیم و آنها را در پوشه drawable پروژه اندروید کپی می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]ratingbars_star
ratingbars_star_empty[/FONT]
[/FONT][/COLOR]
دقت داشته باشید که اندازه عکس ها، در چگونگی نمایش آنها (اندازه آنها) تاثیر دارد (به دلیل ماهیت RatingBar ، معمولا روش های عادی تعیین اندازه برای یک اندازه عکس استفاده شده، جوابگو نیست و مجبوریم که اندازه های عکس ها را به درستی انتخاب کنیم، این مورد معمولا با تجربه به دست می آید. همچنین، قرار دادن اندازه های مختلف عکس در پوشه های drawable مختلف نیز می تواند کمک کند).

2- در پوشه drawable از پروژه اندروید، یک فایل xml با نام ratingstars.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]layer[COLOR=#339933]-[/COLOR]list xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/COLOR][COLOR=#339933]>[/COLOR]
    [COLOR=#339933]<[/COLOR]item android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+android:id/background"[/COLOR]
          android[COLOR=#339933]:[/COLOR]drawable[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@drawable/ratingbars_star_empty"[/COLOR] [COLOR=#339933]/>[/COLOR]
    [COLOR=#339933]<[/COLOR]item android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+android:id/secondaryProgress"[/COLOR]
          android[COLOR=#339933]:[/COLOR]drawable[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@drawable/ratingbars_star_empty"[/COLOR] [COLOR=#339933]/>[/COLOR]
    [COLOR=#339933]<[/COLOR]item android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+android:id/progress"[/COLOR]
          android[COLOR=#339933]:[/COLOR]drawable[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@drawable/ratingbars_star"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]</[/COLOR]layer[COLOR=#339933]-[/COLOR]list[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
3- در فایل styles.xml (که در پوشه values از پروژه اندروید قرار دارد)، باید ، کد style زیر را اضافه می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]style name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"CustomRatingBar"[/COLOR] parent[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@android:style/Widget.RatingBar"[/COLOR][COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]item name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android:progressDrawable"[/COLOR][COLOR=#339933]>[/COLOR]@drawable[COLOR=#339933]/[/COLOR]ratingstars[COLOR=#339933]</[/COLOR]item[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]item name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android:minHeight"[/COLOR][COLOR=#339933]>[/COLOR]15dp[COLOR=#339933]</[/COLOR]item[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]item name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android:maxHeight"[/COLOR][COLOR=#339933]>[/COLOR]15dp[COLOR=#339933]</[/COLOR]item[COLOR=#339933]>[/COLOR]
[COLOR=#339933]</[/COLOR]style[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
یعنی مثلا اگر قبلا هیچ style ای در فایل styles.xml تعریف نشده باشد، اکنون باید کدهای آن مشابه کد زیر باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]resources xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/COLOR][COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR]style name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"CustomRatingBar"[/COLOR] parent[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@android:style/Widget.RatingBar"[/COLOR][COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]item name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android:progressDrawable"[/COLOR][COLOR=#339933]>[/COLOR]@drawable[COLOR=#339933]/[/COLOR]ratingstars[COLOR=#339933]</[/COLOR]item[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]item name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android:minHeight"[/COLOR][COLOR=#339933]>[/COLOR]15dp[COLOR=#339933]</[/COLOR]item[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]item name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android:maxHeight"[/COLOR][COLOR=#339933]>[/COLOR]15dp[COLOR=#339933]</[/COLOR]item[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]</[/COLOR]style[COLOR=#339933]>[/COLOR]
    
[COLOR=#339933]</[/COLOR]resources[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
4- در فایل xml متناظر با لایه گرافیکی Activity که RatingBar تعریف شده است، ویژگی زیر را به کدهای xml تعریف RatingBar اضافه می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]style[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@style/CustomRatingBar"[/COLOR][/FONT]
[/FONT][/COLOR]
یعنی مثلا کل کدهای xml مربوط به RatingBar می تواند مشابه کد زیر باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]RatingBar
    android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/ratingBar1"[/COLOR]
    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]"40dp"[/COLOR]
    style[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@style/CustomRatingBar"[/COLOR]  
    android[COLOR=#339933]:[/COLOR]numStars[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"5"[/COLOR]
    android[COLOR=#339933]:[/COLOR]stepSize[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR]
    android[COLOR=#339933]:[/COLOR]isIndicator[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"false"[/COLOR]
    android[COLOR=#339933]:[/COLOR]rating[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"0.0"[/COLOR] [COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
در کد مثال بالا، در صورت تمایل می توانید مشخصه layout_height را برابر wrap_content انتخاب کنید یا عدد در نظر گرفته شده برای آن را مطابق مورد مناسب برای خود تغییر بدهید.

[h=4]نکته :[/h]گاهی دیده شده که با استفاده از روش بالا و هنگامی که مشخصه layout_height برای تگ RatingBar را برابر یک عدد بزرگتر از ارتفاع لازم برای نمایش عکس ستاره (عکس جدید) انتخاب می کنیم، در زیر RatingBar ، تکراری از آخرین ردیف پیکسل های عکس مربوط به RatingBar را مشاهده خواهیم کرد. این مشکل، به دلیل ماهیت ساختاری RatingBar است و کافی است که در عکس به کار رفته (هر دو عکس)، یک یا دو ردیف آخر از پیکسل های عکس را به صورت کاملا شفاف در بیاوریم (عکس از نوع png باشد) تا تکرار آنها، هیچ تاثیری در خروجی نداشته باشد.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
نحوه وارد کردن پروژه های اندروید شامل یک یا چند کتابخانه به درون برنامه eclipse و تصحیح مسیرها

نحوه وارد کردن پروژه های اندروید شامل یک یا چند کتابخانه به درون برنامه eclipse و تصحیح مسیرها

نحوه وارد (import) کردن پروژه های اندروید شامل یک یا چند کتابخانه (library) به درون برنامه eclipse و تصحیح مسیرها برای رفع خطاهای ناشی از انتقال پروژه اندروید به کامپیوتر جدید :


شاید تابحال برایتان پیش آمده است که یک پروژه اندروید شامل یک یا چندین کتابخانه را به درون برنامه eclipse ، وارد (import) کرده اید و چندین پروژه (در واقع، چندین package) در پنجره Package Explorer برنامه eclipse نمایش داده شده است، اما در کنار پروژه اندروید اصلی، علامت خطا نمایش داده شده است. در اینگونه موارد، معمولا برنامه نویس نمی داند که کدامیک، پروژه اصلی اندروید است و کدامیک کتابخانه (library) و همچنین نمی داند که چگونه باید خطاهای پروژه را برطرف کند. در این مبحث قصد داریم که با شرح چگونگی روند وارد (import) کردن یک پروژه اندروید شامل یک کتابخانه به درون برنامه eclipse ، این موارد را برایتان شرح بدهیم.

فرض کنید که بخواهیم پروژه قرار داده شده در مبحث زیر را به درون برنامه eclipse وارد کنیم :
تاپیک: ساخت امکانات جانبی (جستجو، لیست علاقه مندی، لوگو، منو و ...) برای برنامه اندروید


خوب فرض می کنم که ما فایل های پروژه اندروید مورد نظر را دانلود کرده ایم و حالا قصد داریم که آن را به درون برنامه eclipse وارد (import) کنیم. برای این منظور، در برنامه eclipse ، در پنجره Package Explorer ، با موس، کلیک سمت راست نموده و گزینه Import را انتخاب می کنیم :

android-341.jpg

پنجره ای به شکل زیر نمایش داده می شود :


android-342.jpg

از پوشه Android ، زیرشاخه Existing Android Code Into Workspace را انتخاب کرده و سپس بر روی گزینه Next کلیک می کنیم تا پنجره زیر نمایش داده شود :


android-343.jpg

بر روی دکمه Browse کلیک می کنیم تا پنجره زیر نمایش داده شود :


android-344.jpg

در این پنجره، باید فولدر اصلی حاوی تمام فایل های پروژه را انتخاب کنیم (همان فولدر حاوی تمامی فایل های دانلود شده) و سپس بر روی دکمه OK کلیک کنیم.
پس از انتخاب فولدر اصلی، چون یک پروژه اندروید و یک کتابخانه (library) داریم، دو پروژه (دو package) شناسایی می شود :

android-345.jpg

بر روی دکمه Finish کلیک می کنیم تا هر دو به درون برنامه eclipse وارد شوند و در پنجره Package Explorer نمایش داده شوند :


android-346.png

همان طور که مشاهده می کنید، کنار دومین پروژه (دومین package)، بک علامت خطای قرمز رنگ نمایش داده شده است. قبل از پرداختن به این موضوع، شاید این سوال برایتان پیش آمده است که اصلا از کجا بفهمیم که کدامیک به عنوان کتابخانه (library) به کار رفته است. برای این منظور، من بر روی پروژه (package) با نام ABS ، با موس، کلیک سمت راست کرده و گزینه Properties را انتخاب می کنم :


android-347.jpg

سپس در پنجره ای که باز می شود، از منوی سمت چپ، گزینه Android را انتخاب می کنیم :

android-348.jpg

همان طور که می بینید، در بخشی با عنوان Library ، یک گزینه با عنوان Is Library وجود دارد، چون این گزینه، تیک خورده است بنابراین متوجه می شویم که یک کتابخانه (library) می باشد (نه پروژه اصلی).
خوب حالا به سراغ پروژه با نام SideMenuTutorial می رویم (که همان پروژه اندروید اصلی می باشد که از کتابخانه ABS استفاده کرده است) تا خطای مربوط به آن را برطرف کنیم :

android-349.jpg

در این موارد، به متن خطاها یا فایل هایی که در کنارشان علامت خطا وجود دارد، اصلا توجهی نداشته باشید، زیرا قبل از هر چیز باید مسیر کتابخانه (library) را تصحیح کنیم و خواندن متن آن خطاها، ممکن است شما را گیج کند. خوب ابتدا بر روی نام پروژه SideMenuTutorial ، با موس، کلیک سمت راست کرده و سپس گزینه Properties را انتخاب می کنیم :

android-347.jpg

سپس در پنجره ای که باز می شود، از منوی سمت چپ، گزینه Android را انتخاب می کنیم :


android-351.jpg

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

اکنون برای تصحیح مسیر کتابخانه ABS ، بر روی آن کلیک کرده و بر روی دکمه Remove کلیک می کنیم تا فعلا مورد فعلی حذف شود. پس از حذف آن مورد، بر روی گزینه Add کلیک می کنیم تا پنجره زیر نمایش داده شود :

android-352.jpg

در این پنجره، ABS را انتخاب کرده و بر روی دکمه OK کلیک می کنیم. اکنون مسیر کتابخانه ABS به درستی شناسایی می شود (کنار آن یک علامت سبز رنگ نمایش داده شده است) :


android-353.jpg

بر روی گزینه OK کلیک می کنیم. اکنون دیگر هیچ خطایی برای پروژه SideMenuTutorial نمایش داده نشده است (حتما تا حدود یک دقیقه صبر کنید، علامت های قرمز رنگ خطا حذف خواهد شد) :


android-354.jpg



خوب حالا دیگر مشکلی وجود ندارد و می توانید از پروژه اندروید، فایل apk بسازید، دقت داشته باشید که برای ساخت فایل apk ، باید بر روی پروژه SideMenuTutorial ، با موس کلیک سمت راست کرده و گزینه Export را انتخاب کرده و سایر مراحل را طی کنیم (این را گفتم که به اشتباه، بر روی کتابخانه ABS ، برای ساخت فایل apk ، کلیک نکنید).
 

پیوست ها

  • android-187.jpg
    android-187.jpg
    16.6 کیلوبایت · بازدیدها: 0
  • android-188.jpg
    android-188.jpg
    19.1 کیلوبایت · بازدیدها: 0
  • android-189.png
    android-189.png
    5.5 کیلوبایت · بازدیدها: 0
  • android-190.png
    android-190.png
    7.4 کیلوبایت · بازدیدها: 0
  • android-191.jpg
    android-191.jpg
    18.2 کیلوبایت · بازدیدها: 0
  • android-192.jpg
    android-192.jpg
    19.1 کیلوبایت · بازدیدها: 0
آخرین ویرایش:

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
آموزش نصب بسته های نرم افزاری جدید برای Android SDK Manager ، با وجود تحریم های شرکت گوگل برای ایرانیان

آموزش نصب بسته های نرم افزاری جدید برای Android SDK Manager ، با وجود تحریم های شرکت گوگل برای ایرانیان

همان طور که می دانید، شرکت گوگل، اجازه دسترسی به سایت و بسته های نرم افزاری مربوط به توسعه اندروید را به ایرانیان نمی دهد (حداقل تا امروز که من این مبحث آموزشی را می نویسم که اینگونه بوده است). اکنون قصد داریم که نحوه نصب بسته های نرم افزاری جدید برای Android SDK Manager را آموزش بدهیم، به گونه ای که این محدودیت را نداشته باشیم.

قبل از هر چیز باید از یک نرم افزار خاص استفاده کنیم که نام آن در شکل زیر نمایش داده شده است :

مشاهده پیوست 248459

اگر از این نرم افزار استفاده کنیم، گوگل دیگر نمی تواند جلوی دسترسی ما به منابع مربوط به توسعه اندروید را بگیرد (زیرا ما را تشخیص نمی دهد). اما چگونگی استفاده از این نرم افزار مهم است. ممکن است که فکر کنید که تنها با اجرای این برنامه و سپس اجرای SDK Manager ، می توانید گوگل را دور بزنید، اما اینگونه نیست. اکنون دقیقا شرح می دهم که روند استفاده از این نرم افزار به چه صورت می باشد. ابتدا نرم افزار را اجرا می کنیم و صبر می کنیم تا به سرورهای خود متصل شده و سپس لیستی به صورت زیر نمایش بدهد :
مشاهده پیوست 248460

این لیست، لیست برنامه هایی است که اگر در این پنجره، بر روی آنها، با موس، دو بار کلیک (دابل کلیک) نمایید، آن نرم افزارها باز می شوند و نرم افزار باز شده، می تواند بدون محدودیت، به منابع مورد نظر، دسترسی داشته باشد.
با توجه به توضیحات فوق، بنابراین ما باید نرم افزار SDK Manager را نیز به لیست مورد نظر، اضافه کنیم. برای این منظور، بر روی گزینه Add در این پنجره کلیک می کنیم. پنجره ای به شکل زیر باز می شود :

مشاهده پیوست 248461

در این پنجره، بر روی دکمه قرار گرفته در جلوی عبارت File Path کلیک می کنیم. پنجره دیگری باز می شود. در پنجره باز شده، فایل SDK Manager.exe را با توجه به مسیر آن، پیدا کرده و انتخاب می کنیم (انتخاب و سپس فشردن دکمه Open). بنابراین مسیر فایل SDK Manager.exe تعیین می شود :


مشاهده پیوست 248462

در قسمت Bookmark ، یک نام دلخواه برای آن می نویسیم (مثلا SDK Manager) و سپس بر روی گزینه OK کلیک می کنیم. نام برنامه، در لیست نمایش داده خواهد شد :


مشاهده پیوست 248463

روند فوق، تنها باید یک بار انجام شود و در دفعات بعدی، نیازی نیست که این مراحل را تکرار کنیم. از این به بعد، هر زمان که خواستیم، این نرم افزار را اجرا می کنیم و زمانی که لیست را نمایش داد، بر روی گزینه مربوط به SDK Manager ، با موس، دابل کلیک می کنیم تا برنامه SDK Manager اجرا شود و دیگر مشکلی از بابت دسترسی به بسته های نرم افزاری نخواهیم داشت. مثلا من با دابل کلیک بر روی گزینه SDK Manager ، برنامه SDK Manager را اجرا می کنم. نتیجه به صورت زیر است (باید کمی صبر کنیم تا برنامه اجرا شود) :


مشاهده پیوست 248464



اکنون می توانیم بسته های نرم افزاری مورد نظرمان را نصب کنیم.
 

P O U R I A

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

معرفی روش های ساخت برنامه اندروید به صورت ((محتوا محور))، (جداگانه طراحی کردن محتوای اطلاعاتی برنامه اندروید و قالب آن)

معرفی روش های ساخت برنامه اندروید به صورت ((محتوا محور))، (جداگانه طراحی کردن محتوای اطلاعاتی برنامه اندروید و قالب آن) و بررسی معایب و مزیت های آنها :


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


[h=2]جدا کردن محتوای برنامه و کدهای قالب برنامه، به چه معنی است و اصلا کدام برنامه ها به آن نیاز دارند ؟[/h]ابتدا بگذارید شرح بدهم که اصلا چرا باید محتوای برنامه اندروید را از قالب آن (کدها، گرافیک و ...) جدا کنیم. من تجربه برنامه نویسی خودم برای سایت کلیدستان را شرح می دهم. هنگامی که کدنویسی برای سایت کلیدستان را شروع کردم، محتویات مورد نظرم برای هر مبحث را در صفحه مربوط به آن قرار می دادم، با بزرگتر شدن سایت و هنگامی که تصمیم جدی گرفتم که سایت را توسعه بدهم، دیگر روش قبلی جوابگو نبود زیرا ساختن تعدادی صفحه برای مباحث جدید، کاملا غیر حرفه ای بود. من به دنبال راه حلی بودم که بدون ساخت صفحات جدید که مجبور باشم بر روی سایت قرار بدهم، بتوانم مباحث جدید را به سایت اضافه کنیم. راه حل برای مشکل من، یادگیری زبان PHP و سپس استفاده از پایگاه داده MySQL بود. بنابراین برای ویرایش تعدادی مبحث و یا عنوان های آنها، دیگر مجبور نبودم تعدادی فایل را باز کنم، بلکه خیلی راحت از یک برنامه گرافیکی کار با پایگاه داده MySQL استفاده می کردم که در آن می توانستم به راحتی، تعدادی مبحث و اطلاعات مربوط به آنها را تغییر بدهم (و یا تعدادی مبحث اضافه کنم). همچنین پایگاه داده دارای قابلیت جستجو در مباحث بود که کمک بزرگی برای یافتن مباحث می باشد. بنابراین آن چیزی که به صورت فایل در سایت وجود دارد، کدهایی برای نمایش محتویات اطلاعاتی ذخیره شده در پایگاه داده (database) می باشد (نه خود محتویات اطلاعاتی). چون دیگر محتویات اطلاعاتی در میان کدها وجود ندارد، بنابراین تغییر کدها، بسیار ساده تر خواهد بود و دیگر محتوا مزاحمتی ایجاد نمی کند.

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

فرض کنید فردی بخواهد سایتی با 10 صفحه طراحی کند که برای معرفی یک شرکت است و البته قصد هم ندارد که سایت را توسعه بدهد. مسلما چنین کسی نیاز ندارد که درگیر کدنویسی برای محتوا محور کردن سایت بشود. همینکه 10 صفحه را طراحی کند، کافی است.

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


[h=2]روش های ممکن برای محتوا محور کردن برنامه اندروید :[/h]در ادامه، روش های ممکن (روش های که بنده می شناسم) برای جدا کردن محتویات اطلاعاتی برنامه از قالب برنامه (کدها، گرافیک و ...) را شرح می دهم. توصیه می کنم که ابتدا همه را بخوانید و بعد مناسبترین را برای خود انتخاب کنید.

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


[h=2]روش اول : استفاده از پایگاه داده SQLite[/h]پایگاه داده (database)، حرفه ای ترین انتخاب برای ذخیره اطلاعات می باشد. پایگاه داده ای که در برنامه نویسی اندروید از آن استفاده می شود، پایگاه داده SQLite می باشد. پایگاه داده SQLite ، نسبت به پایگاه های داده ای که در طراحی وب سایت به کار می رود، ساده تر می باشد و همچنین، دارای امنیت پایینی است زیرا به همراه برنامه اندروید، در اختیار کاربر قرار می گیرد (مثل پایگاه داده MySQL نیست که در طراحی وب سایت به کار می رود و در سمت سرور قرار دارد و کاربر به آن دسترسی مستقیم ندارد).

امکان تبدیل پایگاه داده SQLite به پایگاه داده MySQL وجود دارد و همچنین معکوس این تبدیل نیز امکان پذیر می باشد (تعدادی نرم افزار رایگان و یا پولی در این زمینه وجود دارد). بنابراین، اگر قبلا اطلاعاتی را در پایگاه داده سایت خود ذخیره کرده اید (با پایگاه داده MySQL یا انواع دیگری از پایگاه داده)، می توانید آن اطلاعات را در پایگاه داده SQLite ذخیره کنید و بعد آن را، در برنامه اندروید خود، برای نمایش اطلاعات به کار ببرید. همچنین اگر اطلاعات خود را در پایگاه داده SQLite قرار بدهید، در آینده، هر زمان که تصمیم بگیرید، می توانید آن را به پایگاه داده MySQL یا انواع دیگری از پایگاه داده، تبدیل کنید و از آن اطلاعات، در سایت خود استفاده کنید. این ویژگی قابل استفاده بودن اطلاعات، هم در برنامه اندروید و هم در وب سایت (البته با تبدیل پایگاه های داده به هم)، مزیت بسیار بزرگی است.

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


[h=2]روش دوم : استفاده از فایل های HTML برای محتویات اطلاعاتی (ترکیب متن و عکس) و فایل strings.xml برای عنوان ها (متن)[/h]ما می توانیم فایل های HTML را در پوشه assets از پروژه اندروید، قرار بدهیم. بنابراین اگر شما قبلا اطلاعات خود را به صورت فایل HTML (فایل مربوط به نمایش صفحات اینترنتی) داشته باشید، آنگاه می توانید آن را در پوشه assets از پروژه اندروید قرار بدهید و سپس با استفاده از WebView ، محتویات آن صفحه HTML را در یک Activity از برنامه اندروید، به کاربر نمایش بدهید.عنوان های مربوط به هر فایل HTML (هر مبحث) را در فایل strings.xml ذخیره می کنیم. زیرا ابتدا باید در یک Activity ، یک ListView را به کاربر نمایش بدهیم که حاوی عنوان مباحث می باشد (عنوان ها را از فایل strings.xml دریافت کرده و نمایش می دهد)، سپس کاربر مثلا اگر بر روی item شماره 10 از ListView اشاره کند، آنگاه شماره item را به Activity حاوی عنصر WebView می فرستیم و در آن Activity ، فایل HTML که دارای شماره 10 است (اسم فایل ها را شماره دار می نویسیم یا پسوندی شماره دار برای آنها قرار می دهیم) را در WebView نمایش می دهد.این روش، روش مورد علاقه من است. زیرا محتویات سایت کلیدستان به صورت کد HTML می باشند و مثلا وقتی می خواستم که برنامه اندروید آموزش برنامه نویسی MATLAB را بسازم، خیلی راحت، کدها را در تعدادی فایل HTML کپی کردم (البته به دلیل نوع خاص آن اطلاعات، آنها را به عکس نبدیل کردم) و با کمی کدنویسی PHP ، عنوان ها را از پایگاه داده خواندم و به صورت قاعده مند، در فایل strings.xml قرار دادم (عنوان رشته ها را با یک پسوند عددی انتخاب کردم تا ارجاع به آنها، متناسب با شماره مباحث باشد). دقت شود که وقتی می گویم استفاده از کدنویسی PHP ، منظورم این است که دیگر نیازی به copy و paste کردن تک تک عنوان ها نبوده است و تنها با ساخت یک حلقه for و استفاده از الگوی تعریف رشته ها در فایل strings.xml ، تعدادی رشته را در خروجی تولید کردم و سپس آنها را در فایل strings.xml کپی کردم.

خوبی استفاده از فایل های HTML این است که امکان قرار گرفتن عکس و متن در کنار هم را به ما می دهد. علاوه بر این، اگر با مفهوم برنامه نویسی CSS آشنا باشید، می دانید که در تمامی فایل های HTML می توانیم به یک فایل CSS ارجاع بدهیم و بعد با تغییر کدهای آن فایل CSS ، به طور همزمان، ویژگی های محتویات تمامی آن فایل های HTML را تغییر بدهیم (بدون اینکه مجبور باشیم تک تک آنها را باز کرده و ویرایش کنیم).


[h=2]روش سوم : استفاده از فایل های حاوی متن در پوشه assets (با هر نوع پسوند دلخواه)[/h]برنامه نویسان، گاهی اطلاعات خود را در فایل متنی (با هر پسوند دلخواه، مثل txt) ذخیره می کنند. سپس در هنگام کدنویسی، نوع خواندن اطلاعات از فایل متنی را می نویسند. واقعیت این است که این روش، کمی دردسر دارد زیرا نیاز به مقداری کدنویسی دارد که مربوط به کار با رشته ها و ... می باشد، اما باید به این نکته توجه داشت که گاهی اطلاعاتی در اختیار ما قرار می گیرد که در یک فایل متنی موجود است و دارای ساختاری خاص است و برای خواندن آن اطلاعات، مجبوریم که مقداری کدنویسی کنیم. مثلا کد زیر را ببینید :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]some information
variable_1  variable_2  variable_3
[COLOR=#CC66CC]26[/COLOR] [COLOR=#CC66CC]12[/COLOR] [COLOR=#CC66CC]48[/COLOR]
[COLOR=#CC66CC]2[/COLOR] [COLOR=#CC66CC]15[/COLOR] [COLOR=#CC66CC]96[/COLOR]
[COLOR=#CC66CC]8[/COLOR] [COLOR=#CC66CC]85[/COLOR] [COLOR=#CC66CC]42[/COLOR]
[COLOR=#CC66CC]57[/COLOR] [COLOR=#CC66CC]69[/COLOR] [COLOR=#CC66CC]3[/COLOR]
[COLOR=#CC66CC]19[/COLOR] [COLOR=#CC66CC]54[/COLOR] [COLOR=#CC66CC]47[/COLOR][/FONT]
[/FONT][/COLOR]
فرض کنید که اعداد موجو در فایل، در تعداد 10000 ردیف از فایل، وجود داشته باشند و همان طور که مشاهده می کنید، دو خط اول، حاوی مقداری توضیح است. برای این مورد خاص، باید کد بنویسیم که دو خط اول فایل در نظر گرفته نشود و سپس از خط سوم فایل، بر اساس ساختار (که بین هر دو عدد، یک فاصله تکی وجود دارد)، اعداد را بخوانیم.

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


[h=2]روش چهارم : دریافت اطلاعات از سرور اینترنتی، به صورت متن ساده[/h]قبلا در مباحثی دیگر، روش های HttpPost و HttpGet می توانید که از سرور اینترنتی، اطلاعاتی را به صورت متن دریافت کنید. بنابراین می توانید اطلاعات مورد نظر خود را در پایگاه داده (database) موجود در سرور اینترنتی (مثلا پایگاه داده MySQL ذخیره کنید و سپس در برنامه اندروید، به آدرس اینترنتی مورد نظرتان ارجاع داده و اطلاعات را دریافت کنید.

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


[h=2]روش پنجم : دریافت اطلاعات از سرور اینترنتی، به صورت روش json[/h]همان طور که گفتیم، روش های HttpPost و HttpGet برای دریافت متن از سرور اینترنتی به کار می روند. اگر متن مورد نظرمان در سمت سرور را به صورت json تولید کنیم، آنگاه یک متن ساختار یافته به صورت json داریم و هنگام کدنویسی اندروید، کلاس هایی (class) برای پردازش متن به صورت json وجود دارد و خیلی راحت، اطلاعات را از متن خارج می کنیم و در آرایه هایی قرار می دهیم. این روش، به استفاده تنها HttpPost و HttpGet ، برتری دارید زیرا دیگر نیازی به کدنویسی برای پردازش متن دریافتی نداریم.

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


[h=2]روش ششم : دریافت اطلاعات از سرور اینترنتی، به صورت روش XML[/h]کاربرد این روش، همانند روش json است و تنها تفاوت این است که نماد های به کار رفته در متن با ساختار XML ، بسیار بیشتر از json هستند و بنابراین باعث می شود که حجم اطلاعات تبادل شده بین برنامه اندروید و سرور اینترنتی زیاد شود که مطلوب نیست. بنابراین روش json ، از روش XML برتر است.


[h=2]روش هفتم : تعریف اطلاعات در یک کلاس (class)[/h]یکی از روش هایی که من به کار می برم، این است که برخی اطلاعات کلی برنامه اندروید را که می دانم در اکثر Activity های برنامه، مورد استفاده قرار می گیرد را در یک کلاس (class) تعریف می کنم و سپس در Activity های مختلف، یک شیء (object) از آن کلاس می سازم و مقادیر مورد نظر را فراخوانی می کنم. بنابراین، اطلاعات کلی برنامه (مثلا تعداد مباحث) تنها در یک کلاس (class) از برنامه اندروید تعریف شده است و هنگامی که بخواهیم آن مقادیر را تغییر بدهیم، تنها باید کدهای همان کلاس را ویرایش کنیم.

در کل مراقب باشید که وقتی قرار است یک مقدار خاص را در چند Activity به کار ببرید، آن را به صورت دستی در کدهای Activity ننویسید زیرا اگر بعدا بخواهید آن را تغییر بدهید، فراموش خواهید کرد که اصلا آن را در کدام Activity ها به کار برده اید. بنابراین، استفاده از این روش، تمامی استرس های ناشی از اینگونه سردرگمی ها را از بین می برد.
 

P O U R I A

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

ارسال پیامک (SMS) به گوشی یک فرد، در برنامه نویسی اندروید

برای ارسال پیامک (SMS)، به گوشی یک فرد، باید کدهای زیر را بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]SmsManager smsManager [COLOR=#339933]=[/COLOR] SmsManager.[COLOR=#006633]getDefault[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
smsManager.[COLOR=#006633]sendTextMessage[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"09171111111"[/COLOR], [COLOR=#000066][B]null[/B][/COLOR], [COLOR=#0000FF]"SMS text"[/COLOR], [COLOR=#000066][B]null[/B][/COLOR], [COLOR=#000066][B]null[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
که در آن، به جای شماره 09171111111 ، شماره موبایل فرد مورد نظرتان را بنویسید و همچنین به جای عبارت SMS text ، باید متن مربوط به پیامک (SMS) نوشته شود.

دقت شود که برای استفاده از کدهای بالا، حتما باید اجازه ارسال پیامک (SMS) توسط برنامه اندروید را در فایل AndroidManifest.xml ذکر کنیم. بنابراین باید کد زیر درون فایل 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.SEND_SMS"[/COLOR][COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
برای متوجه شدن محل قرارگیری کد بالا، به عنوان مثال، کدهای یک فایل AndroidManifest.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]manifest xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/COLOR]
    [B]package[/B][COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com_3"[/COLOR]
    android[COLOR=#339933]:[/COLOR]versionCode[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1"[/COLOR]
    android[COLOR=#339933]:[/COLOR]versionName[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR] [COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]sdk
        android[COLOR=#339933]:[/COLOR]minSdkVersion[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"7"[/COLOR]
        android[COLOR=#339933]:[/COLOR]targetSdkVersion[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"18"[/COLOR] [COLOR=#339933]/>[/COLOR]
    
    [COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.SEND_SMS"[/COLOR][COLOR=#339933]/>[/COLOR]

    [COLOR=#339933]<[/COLOR]application
        android[COLOR=#339933]:[/COLOR]allowBackup[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"true"[/COLOR]
        android[COLOR=#339933]:[/COLOR]icon[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@drawable/ic_launcher"[/COLOR]
        android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/app_name"[/COLOR]
        android[COLOR=#339933]:[/COLOR]theme[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@style/AppTheme"[/COLOR] [COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]activity
            android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com_3.MainActivity"[/COLOR]
            android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/app_name"[/COLOR] [COLOR=#339933]>[/COLOR]
            [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.MAIN"[/COLOR] [COLOR=#339933]/>[/COLOR]

                [COLOR=#339933]<[/COLOR]category android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.category.LAUNCHER"[/COLOR] [COLOR=#339933]/>[/COLOR]
            [COLOR=#339933]</[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]</[/COLOR]activity[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]</[/COLOR]application[COLOR=#339933]>[/COLOR]

[COLOR=#339933]</[/COLOR]manifest[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

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

ارسال ایمیل (email) به ایمیل یک فرد، به وسیله برنامه های ارسال ایمیل به عنوان واسطه، در برنامه نویسی اندروید

برای ارسال ایمیل (email)، به ایمیل یک فرد، به وسیله برنامه های ارسال ایمیل به عنوان واسطه، باید کدهای زیر را بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Intent i [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_SEND[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
i.[COLOR=#006633]setType[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"message/rfc822"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
i.[COLOR=#006633]putExtra[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]EXTRA_EMAIL[/COLOR]  , [B]new[/B] [COLOR=#003399]String[/COLOR][COLOR=#009900][[/COLOR][COLOR=#009900]][/COLOR][COLOR=#009900]{[/COLOR][COLOR=#0000FF]"recipient@example.com"[/COLOR][COLOR=#009900]}[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
i.[COLOR=#006633]putExtra[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]EXTRA_SUBJECT[/COLOR], [COLOR=#0000FF]"subject of email"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
i.[COLOR=#006633]putExtra[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]EXTRA_TEXT[/COLOR]   , [COLOR=#0000FF]"body of email"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[B]try[/B] [COLOR=#009900]{[/COLOR]
    startActivity[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]createChooser[/COLOR][COLOR=#009900]([/COLOR]i, [COLOR=#0000FF]"Send mail..."[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR] [B]catch[/B] [COLOR=#009900]([/COLOR]android.[COLOR=#006633]content[/COLOR].[COLOR=#006633]ActivityNotFoundException[/COLOR] ex[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
    Toast.[COLOR=#006633]makeText[/COLOR][COLOR=#009900]([/COLOR]MainActivity.[B]this[/B], [COLOR=#0000FF]"There are no email clients installed."[/COLOR], Toast.[COLOR=#006633]LENGTH_SHORT[/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]show[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
در کدهای بالا، به جای عبارت recipient@example.com ، آدرس ایمیل مورد نظرمان را می نویسیم (ایمیل شخصی که قرار است ایمیل ما را دریافت کند). همچنین به جای عبارت subject of email ، باید عنوانی برای موضوع ایمیل بنویسیم. به جای عبارت body of email ، پیامی که می خواهیم در ایمیل نوشته شود را می نویسیم.

با اجرای کد بالا، برنامه های مرتبط با ارسال ایمیل (email) که در گوشی نصب شده اند، نمایش داده می شوند (اگر هیچ برنامه ای در این زمینه، وجود نداشته باشد، یک پیام نمایش داده می شود) :

625.jpg

مثلا من که دارای یک ایمل gmail می باشم، گزینه Gmail را انتخاب می کنم و بنابراین اطلاعات مربوط به ایمیل، در صفحه زیر نمایش داده می شود و می توانم ایمیل را ارسال کنم :


626.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
برقراری تماس تلفنی (phone call) با استفاده از برنامه اندروید، از طریق کدنویسی، در برنامه نویسی اندروید

برقراری تماس تلفنی (phone call) با استفاده از برنامه اندروید، از طریق کدنویسی، در برنامه نویسی اندروید

برای برقراری تماس تلفنی (phone call) توسط کدنویسی، باید کدهای زیر را اجرا کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]String[/COLOR] number [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"tel:"[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"09171111111"[/COLOR][COLOR=#339933];[/COLOR]
Intent callIntent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_CALL[/COLOR], Uri.[COLOR=#006633]parse[/COLOR][COLOR=#009900]([/COLOR]number[COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
startActivity[COLOR=#009900]([/COLOR]callIntent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
که در آن، به جای شماره 09171111111 ، شماره مورد نظر خود را می نویسیم.

دقت شود که برای استفاده از کدهای بالا، حتما باید اجازه برقراری تماس تلفنی (phone call) توسط برنامه اندروید را در فایل AndroidManifest.xml ذکر کنیم. بنابراین باید کد زیر درون فایل 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.CALL_PHONE"[/COLOR][COLOR=#339933]></[/COLOR]uses[COLOR=#339933]-[/COLOR]permission[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
برای متوجه شدن محل قرارگیری کد بالا، به عنوان مثال، کدهای یک فایل AndroidManifest.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]manifest xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/COLOR]
    [B]package[/B][COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com_3"[/COLOR]
    android[COLOR=#339933]:[/COLOR]versionCode[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1"[/COLOR]
    android[COLOR=#339933]:[/COLOR]versionName[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR] [COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]sdk
        android[COLOR=#339933]:[/COLOR]minSdkVersion[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"7"[/COLOR]
        android[COLOR=#339933]:[/COLOR]targetSdkVersion[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"18"[/COLOR] [COLOR=#339933]/>[/COLOR]
    
    [COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.CALL_PHONE"[/COLOR][COLOR=#339933]></[/COLOR]uses[COLOR=#339933]-[/COLOR]permission[COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR]application
        android[COLOR=#339933]:[/COLOR]allowBackup[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"true"[/COLOR]
        android[COLOR=#339933]:[/COLOR]icon[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@drawable/ic_launcher"[/COLOR]
        android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/app_name"[/COLOR]
        android[COLOR=#339933]:[/COLOR]theme[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@style/AppTheme"[/COLOR] [COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]activity
            android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com_3.MainActivity"[/COLOR]
            android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/app_name"[/COLOR] [COLOR=#339933]>[/COLOR]
            [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.MAIN"[/COLOR] [COLOR=#339933]/>[/COLOR]

                [COLOR=#339933]<[/COLOR]category android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.category.LAUNCHER"[/COLOR] [COLOR=#339933]/>[/COLOR]
            [COLOR=#339933]</[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]</[/COLOR]activity[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]</[/COLOR]application[COLOR=#339933]>[/COLOR]

[COLOR=#339933]</[/COLOR]manifest[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
بنابراین با اجرای کدها، گوشی اندروید شروع به برقراری تماس (phone call) با آن شماره می کند :

624.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
مشاهده و دسترسی به فایل های منبع (عکس، آهنگ و ...) موجود در یک فایل apk متعلق به یک برنامه اندروید

مشاهده و دسترسی به فایل های منبع (عکس، آهنگ و ...) موجود در یک فایل apk متعلق به یک برنامه اندروید

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


برای نشان دادن مراحل این روش، من از فایل apk مربوط به بازی Subway Surf استفاده می کنم. برای این منظور، فایل apk را از اینترنت دریافت کرده ام که دارای پسوند apk می باشد :

642.png

اینکه بتوانید در ویندوز، پسوند فایل ها را ببینید، اهمیت دارد و بدون آن، امکان استفاده از این روش نیست. بنابراین چنانچه در ویندوز شما، پسوند فایل ها نمایش داده نمی شود، تاپیک کار با فایل ها (files) و پوشه ها (folders) در ویندوز را بخوانید تا چگونگی تعیین نمایش پسوند (extension) فایل ها در ویندوز را متوجه بشوید.

پسوند فایل را از apk به zip تبدیل می کنیم :




643.png

سپس با یک نرم افزار مخصوص فشرده سازی فایل ها (مثل winzip یا winrar) ، فایل را از حالت فشرده در می آوریم (همان روش معمولی unzip کردن فایل هایی که قبلا فشره شده اند) :


644.png

بنابراین فایل های از فشردگی درآمده را درون یک پوشه (folder) خواهیم داشت. نگاهی به فایل های درون آن می اندازیم :


645.png

مشاهده می کنید که پوشه های assets و res را داریم که در آنها، مواردی مثل عکس ها، آهنگ ها و ... را می توانیم بیابیم. با جستجو در زیرپوشه های موجود در آنها، می توانیم یک سری فایل را بیابیم. مثلا در پوشه drawable ، موارد زیر وجود دارد :

646.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
Context چیست و چه نقشی در ساخت برنامه اندروید دارد ؟

Context چیست و چه نقشی در ساخت برنامه اندروید دارد ؟

Context به عنوان کلاس پایه (base class) برای Activity ها، سرویس ها (service)، کل برنامه اندروید (Application) و ... به کار رفته است. در واقع آنها از گسترش (extend) کلاس Context به وجود آمده اند و بنابراین در برخی مواقع که در حال کدنویسی برای بخش های مختلف برنامه اندروید هستیم، باید به context مربوط به آنها رجوع کنیم. مثلا در هنگام کدنویسی در یک Activity ، ممکن است که برای یک سری کد، نیاز به context مربوط به خود Activity داشته باشیم و برای یک سری کد دیگر، نیاز به context مربوط به کل برنامه اندروید (Application) باشد. بنابراین رجوع به context مربوط به آنها، برای برخی کدها، ضروری است.

context مربوط به هر کدام از مواردی که ذکر کردیم، اطلاعات محیطی (environment data) مربوط به آنها را ارائه می کند. Context به ما کمک می کند که به منابع (resources) و کلاس ها (classes) و برخی موارد دیگر از آنها، دسترسی پیدا کنیم.

شاید با یک مثال ساده، بتوان مفهوم context را بیان کرد. فرض کنید که شما در یک شهر، غریب هستید و هیچ کجا را نمی شناسید. یک راهنما در کنار شما هست که هر وقت که گیج شدید، از او می پرسید که من کجا هستم و وی با باز کردن یک نقشه، محل شما را می گوید و همچنین می گوید که چگونه می توانید به نقاط مختلف شهر (مثل هتل ها، رستوران ها و ...) بروید. context نیز نقشی مشابه آن راهنما را برای ما دارد که در بخش های مختلف برنامه اندروید، با مراجعه به Context مربوط به آن، context ما را راهنمایی می کند که چگونه به منابع (resources) و کلاس های (classes) مورد نظرمان (از این بخش و یا از سایر بخش های برنامه اندروید)، دسترسی پیدا کنیم.

در انتها، شاید بد نباشد که کدهای کلاس Context را ببینید، برای این منظور، به لینک زیر بروید :
androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/android/content/Context.java
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
عدم استفاده از روش ArrayAdapter.addAll() (روش addAll برای متغیر از نوع ArrayAdapter) در نسخه های API پایین تر از 11

عدم استفاده از روش ArrayAdapter.addAll() (روش addAll برای متغیر از نوع ArrayAdapter) در نسخه های API پایین تر از 11

عدم استفاده از روش ArrayAdapter.addAll() (روش addAll برای متغیر از نوع ArrayAdapter) در نسخه های API پایین تر از 11 و جایگزینی روش ArrayAdapter.add() (روش add برای متغیر از نوع ArrayAdapter) به جای آن، برای جلوگیری از ایجاد Force Close ، در برنامه نویسی اندروید :


چنانچه در نسخه های API پایین تر از 11 ، از روش ArrayAdapter.addAll() (روش addAll برای متغیر از نوع ArrayAdapter) استفاده کنیم، با Force Close روبرو خواهیم شد، بنابراین چنانچه قصد داریم که از این روش برای نسخه های API پایین تر از 11 هم استفاده کنیم، برای رفع این مشکل، باید از روش ArrayAdapter.add() (روش add برای متغیر از نوع ArrayAdapter) استفاده کنیم که البته باید در یک حلقه for به کار رود تا همان عملکرد را داشته باشد.

برای درک بهتر این موضوع، فرض کنید که کدهای زیر را نوشته ایم (بخشی از کدهای یک برنامه اندروید دلخواه) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] addNewData[COLOR=#009900]([/COLOR]List[COLOR=#339933]<[/COLOR]String[COLOR=#339933]>[/COLOR] data[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                
        [B]this[/B].[COLOR=#006633]removeFooterView[/COLOR][COLOR=#009900]([/COLOR]footer[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        
        adapter.[COLOR=#006633]addAll[/COLOR][COLOR=#009900]([/COLOR]data[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        adapter.[COLOR=#006633]notifyDataSetChanged[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        isLoading [COLOR=#339933]=[/COLOR] [COLOR=#000066][B]false[/B][/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
در کد بالا، روش addAll را به کار برده ایم که در نسخه های API پایین تر از 11 ، باعث ایجاد Forec Close می شود (متغیر adapter از جنس ArrayAdapter می باشد). اکنون کد بالا را با روش add و همچنین یک حلقه for ، بازنویسی می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] addNewData[COLOR=#009900]([/COLOR]List[COLOR=#339933]<[/COLOR]String[COLOR=#339933]>[/COLOR] data[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                
        [B]this[/B].[COLOR=#006633]removeFooterView[/COLOR][COLOR=#009900]([/COLOR]footer[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        
        [COLOR=#000066][B]int[/B][/COLOR] data_size [COLOR=#339933]=[/COLOR] data.[COLOR=#006633]size[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [B]for[/B][COLOR=#009900]([/COLOR][COLOR=#000066][B]int[/B][/COLOR] x [COLOR=#339933]=[/COLOR] [COLOR=#CC66CC]0[/COLOR][COLOR=#339933];[/COLOR] x [COLOR=#339933]<[/COLOR] data_size[COLOR=#339933];[/COLOR] x [COLOR=#339933]=[/COLOR] x[COLOR=#339933]+[/COLOR][COLOR=#CC66CC]1[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                [COLOR=#003399]String[/COLOR] data_element [COLOR=#339933]=[/COLOR] data.[COLOR=#006633]get[/COLOR][COLOR=#009900]([/COLOR]x[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                adapter.[COLOR=#006633]add[/COLOR][COLOR=#009900]([/COLOR]data_element[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]
        adapter.[COLOR=#006633]notifyDataSetChanged[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        isLoading [COLOR=#339933]=[/COLOR] [COLOR=#000066][B]false[/B][/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
کد بالا، در نسخه های API پایین تر از 11 نیز بدون هیچگونه مشکلی اجرا می شود و همان عملکرد را مورد نظرمان را دارد.
 

P O U R I A

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

ذخیره اطلاعات بر اساس الگوی ((کلید-مقدار)) (key-value)، با استفاده از HashMap ، در برنامه نویسی اندروید

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

فرض کنید که قصد داریم اطلاعات زیر را ذخیره کنیم :


مقدار (value)کلید (key)
RedColor1
BlueColor2
GreenColor3
WhiteColor4
یعنی می خواهیم ساختاری داشته باشیم (ساختاری برای ذخیره اطلاعات) که اگر به آن، کلید (key) را برابر Color1 دادیم، آنگاه مقدار Red را به ما برگرداند. در واقع، زوج اطلاعات خواهیم داشت که یکی را به عنوان کلید (key) در نظرمی گیریم و آن را به ساختار می دهیم تا مقدار متناظر آن را به ما برگرداند.

حال قصد داریم که ساختار مورد نظر را با استفاده از HashMap بسازیم. با توجه به اطلاعات بالا، کد زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]HashMap[COLOR=#339933]<[/COLOR][COLOR=#003399]String[/COLOR], String[COLOR=#339933]>[/COLOR] myHashMap [COLOR=#339933]=[/COLOR] [B]new[/B] HashMap[COLOR=#339933]<[/COLOR][COLOR=#003399]String[/COLOR], String[COLOR=#339933]>[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]

myHashMap.[COLOR=#006633]put[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Color1"[/COLOR],[COLOR=#0000FF]"Red"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
myHashMap.[COLOR=#006633]put[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Color2"[/COLOR],[COLOR=#0000FF]"Blue"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
myHashMap.[COLOR=#006633]put[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Color3"[/COLOR],[COLOR=#0000FF]"Green"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
myHashMap.[COLOR=#006633]put[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Color4"[/COLOR],[COLOR=#0000FF]"White"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]

[COLOR=#003399]String[/COLOR] value [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR][COLOR=#003399]String[/COLOR][COLOR=#009900])[/COLOR] myHashMap.[COLOR=#006633]get[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Color1"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
ابتدا با کد زیر، یک HashMap با نام myHashMap ساخته ایم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]HashMap[COLOR=#339933]<[/COLOR][COLOR=#003399]String[/COLOR], String[COLOR=#339933]>[/COLOR] myHashMap [COLOR=#339933]=[/COLOR] [B]new[/B] HashMap[COLOR=#339933]<[/COLOR][COLOR=#003399]String[/COLOR], String[COLOR=#339933]>[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
به عبارت زیر در آن توجه کنید :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR][COLOR=#003399]String[/COLOR], String[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
در عبارت بالا، تعیین کرده ایم که هم کلید (key) و هم مقدارها (String) از جنس رشته (String) می باشند. یعنی به ترتیب زیر :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]key, value[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
در صورت تمایل می توان انواع دیگری برای آنها انتخاب کرد (مثل Integer ، انواع ArrayList و ...).

سپس با روش put ، زوج مقادیر را در myHashMap قرار داده ایم (مرحله ذخیره اطلاعات) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]myHashMap.[COLOR=#006633]put[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Color1"[/COLOR],[COLOR=#0000FF]"Red"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
myHashMap.[COLOR=#006633]put[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Color2"[/COLOR],[COLOR=#0000FF]"Blue"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
myHashMap.[COLOR=#006633]put[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Color3"[/COLOR],[COLOR=#0000FF]"Green"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
myHashMap.[COLOR=#006633]put[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Color4"[/COLOR],[COLOR=#0000FF]"White"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
در آخر، با روش get ، مقدار متناظر با کلید Color1 را فراخوانی کرده ایم (مقدار Red برگردانده می شود) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]String[/COLOR] value [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR][COLOR=#003399]String[/COLOR][COLOR=#009900])[/COLOR] myHashMap.[COLOR=#006633]get[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"Color1"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

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

معرفی کد USSD (برای پرداخت وجه، دریافت اطلاعات، ثبت اطلاعات و ...) و بیان روش هایی برای اجرای کدهای USSD در برنامه نویسی اندروید

احتمالا تاکنون با کد USSD آشنا شده اید. مثلا بانک شما، یک شماره شامل یک سری حروف خاص و شماره هایی در بین آنها را به شما می دهد و با شماره گیری آن کد USSD ، یک سری اطلاعات به شما نمایش داده می شود که با انتخاب هایی، می توانید به مشاهده اطلاعات، تغییر اطلاعات و یا حتی پرداخت وجه، اقدام نمایید.

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

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

به عنوان مثال، کد USSD اصلی مربوط به بانک ملت (شرکت به پرداخت ملت)، عبارت است از :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]*[/COLOR][COLOR=#CC66CC]712[/COLOR]#[/FONT]
[/FONT][/COLOR]
همان طور که مشاهده می کنید، در ابتدای کد USSD ، علامت * و در انتهای آن، علامت # قرار می گیرد. بنابراین چنانچه کد USSD بالا را شماره گیری کنیم، به سیستم متناظر با آن که مرتبط با بانک ملت است، متصل می شویم (مستقل از برنامه های اندروید نصب بر روی گوشی) :

1460.jpg

راهنمای خود شرکت (در یک pdf) را در لینک زیر برای دانلود قرار داده ام، در صورت تمایل، می توانید نگاهی به ان بیندازید (تنها برای مبحث آموزشی، برای سایر استفاده ها، راهنما را از سایت اصلی شرکت دریافت کنید) :
دانلود راهنمای کد USSD برای شرکت به پرداخت ملت: مشاهده پیوست 253.zip

پیام بالا نمایش دهنده آن است که یک کد USSD را شماره گیری کرده ایم و اکنون اپراتور تلفن همراه در حال پردازش آن است. سپس بر اساس ساختار مربوط به آن، گزینه های زیر نمایش داده می شود :

1461.jpg

مشاهده می کنید که چند گزینه برای انتخاب نمایش داده شده است. بنابراین باید یک عدد بین 1 تا 7 را متناسب با گزینه انتخابی، در کادر وارد کرده و بر روی دکمه send اشاره کنیم. مثلا اگر عدد 1 را انتخاب کنیم، انتخاب های مربوط به مرحله دوم به صورت زیر نمایش داده می شود :


1462.jpg

در همینجا این نکته مهم را ذکر می کنم که ساز و کار کدهای USSD به این صورت است که کاربر می تواند انتخاب های خود را در ادامه کد ذکر کند، یعنی در همان ابتدای شماره گیری، چون می داند در مرحله اول می خواهد گزینه شماره 1 را انتخاب کند، این انتخاب را در کد USSD ذکر کرده و سپس آن را شماره گیری می کند تا دیگر مرحله اول به وی نمایش داده نشود. یعنی کد USSD که شماره گیری می کنیم، به صورت زیر خواهد بود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]*[/COLOR][COLOR=#CC66CC]712[/COLOR][COLOR=#339933]*[/COLOR][COLOR=#CC66CC]1[/COLOR]#[/FONT]
[/FONT][/COLOR]
یک علامت * را بعد از عدد 712 قرار داده ایم و بعد عدد 1 که همان انتخاب ما برای مرحله اول است را قید کرده ایم. علامت # هم همیشه در انتهای کد قرار می گیرد. پس با شماره گیری کد بالا، مستقیما مرحله دوم نمایش داده می شود :

1462.jpg

شماره گیری کد USSD توسط برنامه اندروید :

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

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

لایه گرافیکی برنامه اندروید به صورت زیر می باشد :

1463.jpg

با اشاره بر روی دکمه اول، همان کد USSD اصلی شماره گیری می شود. اما اگر کاربر بخواهد که انتخاب مرحله اول را در خود برنامه اندروید ما تعیین کند، در پایین صفحه، شماره مورد نظرش را در عنصر EditText وارد کرده (به عنوان مثال ما نوشته ایم که عدد 1 یا 2 را انتخاب کند) و بعد بر روی دکمه دوم (در پایین صفحه)، اشاره می کند تا ما انتخاب وی را از EditText دریافت کرده و به کد USSD اصلی اضافه می کنیم و سپس شماره گیری کد USSD شروع می شود (در صورت تمایل، می توانید کدهایی را برای چک کردن صحت اطلاعات ورودی کاربر اجرا کنید، یعنی مراقب باشید که یک وقت کاربر خودش یک سری کد USSD را در این مرحله وارد نکند که ناخواسته، فرآیندی غیر از فرآیند مورد نظر شما اجرا شود، در کل هر وقت از کاربران ورودی دریافت می کنید، مراقب کاربران کنجکاو باشید !).


لینک های دانلود :
مشاهده پیوست 251.zip
مشاهده پیوست 252.rar

اما اکنون کدهای برنامه اندروید را شرح می دهیم.

کدهای فایل activity_main.xml که لایه گرافیکی متناظر برای Activity را تعریف می کند :
کد:
[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]ScrollView xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/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] [COLOR=#339933]>[/COLOR]
    
        [COLOR=#339933]<[/COLOR]LinearLayout 
            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] [COLOR=#339933]>[/COLOR]
        
            [COLOR=#339933]<[/COLOR]TextView
                android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/textView1"[/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]layout_margin[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"5dp"[/COLOR]
                android[COLOR=#339933]:[/COLOR]text[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"شماره گیری کد اصلی :"[/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]"Dial USSD Code (Main Code)"[/COLOR] [COLOR=#339933]/>[/COLOR]
            
            [COLOR=#339933]<[/COLOR][COLOR=#003399]View[/COLOR]
                    android[COLOR=#339933]:[/COLOR]layout_width [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"fill_parent"[/COLOR]
                    android[COLOR=#339933]:[/COLOR]layout_height[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"10dp"[/COLOR]
                    android[COLOR=#339933]:[/COLOR]layout_marginTop[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"20dp"[/COLOR]
                    android[COLOR=#339933]:[/COLOR]layout_marginBottom[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"20dp"[/COLOR]
                    android[COLOR=#339933]:[/COLOR]background[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"#FF0000"[/COLOR] [COLOR=#339933]/>[/COLOR]
            
            [COLOR=#339933]<[/COLOR]TextView
                android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/textView1"[/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]layout_margin[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"5dp"[/COLOR]
                android[COLOR=#339933]:[/COLOR]text[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"شماره گیری با یک مرحله انتخاب شده :"[/COLOR] [COLOR=#339933]/>[/COLOR]
            
            [COLOR=#339933]<[/COLOR]EditText
                android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/editText1"[/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]hint[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"please enter number 1 or 2"[/COLOR]
                android[COLOR=#339933]:[/COLOR]ems[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"10"[/COLOR] [COLOR=#339933]>[/COLOR]
        
                [COLOR=#339933]<[/COLOR]requestFocus [COLOR=#339933]/>[/COLOR]
            [COLOR=#339933]</[/COLOR]EditText[COLOR=#339933]>[/COLOR]
            
            [COLOR=#339933]<[/COLOR][COLOR=#003399]Button[/COLOR]
                android[COLOR=#339933]:[/COLOR]id[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@+id/button2"[/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]"Dial USSD Code (With Level 1 choice)"[/COLOR] [COLOR=#339933]/>[/COLOR]
        
        [COLOR=#339933]</[/COLOR]LinearLayout[COLOR=#339933]>[/COLOR]

[COLOR=#339933]</[/COLOR]ScrollView[COLOR=#339933]>[/COLOR]
[/FONT]
[/FONT][/COLOR]
که در آن، دو دکمه (Button)، دو TextView ، یک EditText و یک خط افقی را تعریف کرده ایم. همچنین از ScrollView برای ایجاد امکان اسکرول به بالا و پایین (برای مواقعی که کل محتوا از اندازه صفحه نمایش بزرگتر است) استفاده نموده ایم.

کدهای فایل MainActivity.java که همان Activity اصلی برنامه اندروید است :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]package[/B] [COLOR=#006699]com.kelidestan.ussd_example[/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.net.Uri[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.os.Bundle[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.View[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.View.OnClickListener[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.Button[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.EditText[/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=#003399]Button[/COLOR] b_1 [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR][COLOR=#003399]Button[/COLOR][COLOR=#009900])[/COLOR] findViewById[COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]button1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                b_1.[COLOR=#006633]setOnClickListener[/COLOR][COLOR=#009900]([/COLOR][B]new[/B] OnClickListener[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                                                 
                    @Override
                    [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onClick[COLOR=#009900]([/COLOR][COLOR=#003399]View[/COLOR] v[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                        [COLOR=#003399]String[/COLOR] USSD_code [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"tel:"[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"*712#"[/COLOR][COLOR=#339933];[/COLOR]
                        [COLOR=#003399]String[/COLOR] encodedHash [COLOR=#339933]=[/COLOR] Uri.[COLOR=#006633]encode[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"#"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                        USSD_code [COLOR=#339933]=[/COLOR] USSD_code.[COLOR=#006633]replace[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"#"[/COLOR], encodedHash[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                        Intent callIntent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_CALL[/COLOR], Uri.[COLOR=#006633]parse[/COLOR][COLOR=#009900]([/COLOR]USSD_code[COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666][I]//must add permission in AndroidManifest.xml : <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>[/I][/COLOR]
                        startActivity[COLOR=#009900]([/COLOR]callIntent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                    [COLOR=#009900]}[/COLOR]
                [COLOR=#009900]}[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                
                [COLOR=#003399]Button[/COLOR] b_2 [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR][COLOR=#003399]Button[/COLOR][COLOR=#009900])[/COLOR] findViewById[COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]button2[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                b_2.[COLOR=#006633]setOnClickListener[/COLOR][COLOR=#009900]([/COLOR][B]new[/B] OnClickListener[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                                                 
                    @Override
                    [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onClick[COLOR=#009900]([/COLOR][COLOR=#003399]View[/COLOR] v[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
                        EditText et [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR]EditText[COLOR=#009900])[/COLOR] findViewById[COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]editText1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                        [COLOR=#003399]String[/COLOR] editText_input [COLOR=#339933]=[/COLOR] et.[COLOR=#006633]getText[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]toString[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                        [COLOR=#003399]String[/COLOR] USSD_code [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"tel:"[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"*712*"[/COLOR] [COLOR=#339933]+[/COLOR] editText_input [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"#"[/COLOR][COLOR=#339933];[/COLOR]
                        [COLOR=#003399]String[/COLOR] encodedHash [COLOR=#339933]=[/COLOR] Uri.[COLOR=#006633]encode[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"#"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                        USSD_code [COLOR=#339933]=[/COLOR] USSD_code.[COLOR=#006633]replace[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"#"[/COLOR], encodedHash[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                        Intent callIntent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_CALL[/COLOR], Uri.[COLOR=#006633]parse[/COLOR][COLOR=#009900]([/COLOR]USSD_code[COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666][I]//must add permission in AndroidManifest.xml : <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>[/I][/COLOR]
                        startActivity[COLOR=#009900]([/COLOR]callIntent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                    [COLOR=#009900]}[/COLOR]
                [COLOR=#009900]}[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        [COLOR=#009900]}[/COLOR]



[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
توضیحاتی در مورد کدهای Activity :

قبلا شماره گیری را در چند پست قبل شرح داده بودیم. فقط یک نکته مهم وجود دارد و آن این است که اگر علامت # را به صورت ساده در شماره ذکر کنیم، این علامت، شماره گیری نخواهد شد. بنابراین باید Uri.encode را برای آن به کار ببریم. یعنی به صورت زیر :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]String[/COLOR] encodedHash [COLOR=#339933]=[/COLOR] Uri.[COLOR=#006633]encode[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"#"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
بعد رشته encodedHash را به جای علامت # در رشته (String) مربوط به تعریف شماره، قرار می دهیم (جایگزین می کنیم). برای این منظور، از روش replace استفاده می کنیم. بنابراین کد USSD به صورت زیر تعریف می شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]String[/COLOR] USSD_code [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"tel:"[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"*712#"[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]String[/COLOR] encodedHash [COLOR=#339933]=[/COLOR] Uri.[COLOR=#006633]encode[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"#"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
USSD_code [COLOR=#339933]=[/COLOR] USSD_code.[COLOR=#006633]replace[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"#"[/COLOR], encodedHash[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.CALL_PHONE"[/COLOR][COLOR=#339933]></[/COLOR]uses[COLOR=#339933]-[/COLOR]permission[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
با اجرای برنامه اندروید، اگر بر روی دکمه اول اشاره کنیم، کد USSD اصلی ارا شده و صفحه زیر را مشاهده می کنیم :

1461.jpg

زیرا کد USSD زیر اجرا شده است :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]*[/COLOR][COLOR=#CC66CC]712[/COLOR]#[/FONT]
[/FONT][/COLOR]
اما چنانچه در EditText ، عدد 1 را وارد کرده و بعد بر روی دکمه دوم اشاره کنیم، صفحه زیر را مشاهده می کنیم :

1462.jpg

زیرا کد USSD زیر اجرا شده است :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]*[/COLOR][COLOR=#CC66CC]712[/COLOR][COLOR=#339933]*[/COLOR][COLOR=#CC66CC]1[/COLOR]#[/FONT]
[/FONT][/COLOR]
نکته :

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

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
دانلود مستقیم بسته نرم افزاری Offline GDG Developer Kit

دانلود مستقیم بسته نرم افزاری Offline GDG Developer Kit

دانلود مستقیم بسته نرم افزاری Offline GDG Developer Kit (بسته ای کامل از ابزارها و آموزش های مرتبط با برنامه نویسی اندروید که توسط خود گوگل ارائه می شود):


یکی از دوستان، درخواست کرده بودند که Offline GDG Developer Kit که توسط گوگل ارائه می شود را بر روی سرور کلیدستان قرار بدهیم تا تمامی توسعه دهندگان اندروید بتوانند به راحتی آن را دانلود کنند (زیرا گوگل ip های ایران رو فیلتر میکنه و نمیگذاره که بسته های نرم افزاری مختلف را دانلود کنند).

البته برای دوستانی که هنوز برنامه نویسی اندروید را شروع نکرده اند، تذکر بدهم که شما برای شروع، کافی است بسته نرم افزاری ADT Bundle (کمتر از 500 مگابایت) را از کلیدستان دریافت کنید (همان برای شروع کافی است) و این بسته نرم افزاری که در این مبحث معرفی می شود، برای دوستانی است که می خواهند تمامی موارد مرتبط با برنامه نویسی اندروید را به صورت یکجا داشته باشند (یک بسته کامل).

Offline GDG Developer Kit به صورت 4 عدد DVD می باشد که گوگل آنها را برای دانلود قرار داده است (البته آنها را ارسال نیز می کند) :


1465.jpg

1464.jpg

حجم این بسته نرم افزاری زیاد است و با این فیلترهای گوگل برای ip های ایران، دانلود آن بسیار دشوار می باشد. بنابراین اکنون برای رفع این مشکل، یک کپی از بسته نرم افزاری Offline GDG Developer Kit بر روی کلیدستان قرار گرفته تا بتوانید آن را به راحتی دانلود کنید.

قبل از هر چیز، باید تذکر بدهم که گوگل، این بسته را به دو شکل ارائه داده است. یکی به صورت فایل های UDF ، که مناسب برای رایت کردن بر روی DVD می باشد و دومی، به صورت فایل های zip می باشد که بنده فایل های zip را بر روی سرور کلیدستان قرار داده ام. بد نیست که لینک اصلی خود گوگل را ذکر کنم :
کد:
[LEFT][URL="https://sites.google.com/site/gdgdevkitpilotreadme/home"]sites.google.com/site/gdgdevkitpilotreadme/home [/URL]
[URL="https://sites.google.com/site/gdgdevkitpilotreadme/home/downloads"]sites.google.com/site/gdgdevkitpilotreadme/home/downloads[/URL][/LEFT]


بنده خودم تنها فایل ها را بر روی سرور unzip کردم تا سالم بودن فایل آنها را آزمایش کنم و هنوز فرصت نکرده ام که بخش های مختلف این بسته نرم افزاری را بررسی نمایم. خود گوگل، محتوای این بسته نرم افزاری را به صورت زیر ذکر کرده است :

The Google Cloud Platform docs from https://developers.google.com/cloud, including the SDKs (Software Development Kits) for App Engine
The entire Android Website : http://developer.android.com including Android SDKs and Android Studio installs
Material Design docs from http://google.com/design
Web Fundamentals documentation from http://developers.google.com/web
Videos on Google Cloud Platform development from Google Developers YouTube channel
Videos on Android development from Google Developers YouTube channel
The entire I/O Dev Bytes Series
Full Google Udacity course videos (Android, App Engine, HTML5 games, UX, Mobile Web)
Google I/O 2014 Design Track videos

و اما لینک های دانلود از سرور کلیدستان :

فایل ها در تاریخ 1393/12/22 (میلادی : 2015/03/13) از سرور گوگل دریافت شدند.
 
بالا