دانلود فوری


در این سوال از شما می‌خواهیم فایل پایه را به گونه‌ای تکمیل کنید که با وارد کردن آدرس یک فایل در EditText موجود در صفحه، پس از لمس دکمه Download فایل در آدرس مشخصی دانلود شود. پروژه پایه را از اینجا دانلود کنید. نمای کلی پروژه پایه:

فایل‌های دانلودی باید در فولدر DCIM موجود در حافظه خارجی دستگاه ذخیره شود.

نکات حیاتی:🔗

  • استفاده‌ از کتابخانه‌های دانلود فایل امکان پذیر نیست و درصورت افزودن کتابخانه جدید به پروژه پایه و استفاده از آن، نمره‌ای به شما تعلق نمی‌گیرد.
  • دقت کنید که فایل‌ها حتما در مکان گفته‌شده دانلود شوند.
  • برای ذخیره فایل دانلودی از نام و پسوند فایل موجود در سرور استفاده کنید.
  • قبل از شروع دانلود، مقدار متغیر isDownloadCompleted موجود در فایل JudgeUtil را برابر با false قرار دهید و پس از اتمام دانلود، مقدار آن را true کنید.
  • برای جلوگیری از بروز خطای حجم فایل ارسالی، قبل از ساخت و ارسال فایل zip دقت کنید که پوشه‌های build در این فایل وجود نداشته باشند.

ساختار بخشی از فایل پایه بصورت زیر است. می‌توانید فایل‌هایی به پوشه java (یا زیر پوشه‌های آن) اضافه کنید. همچنین مجازید به فایل‌هایی که با علامت (---->) مشخص شده‌اند کد‌های خودتان را اضافه کنید (اما مجاز به تغییر یا حذف کد‌های موجود نیستید). درنهایت محتویات پوشه app را در قالب یک فایل فشرده ارسال کنید.

app
│
└───src
    ├───main
    │   │   AndroidManifest.xml                         <------
    │   │
    │   ├───java
    │   │   └───ir
    │   │       └───quera
    │   │           └───android
    │   │               └───downloader
    │   │                       JudgeUtil.java
    │   │                       MainActivity.java       <------
    │   │
    │   └───res
    │       ├───drawable
    │       ├───drawable-v24
    │       ├───layout
    │       ├───mipmap-anydpi-v26
    │       ├───mipmap-hdpi
    │       ├───mipmap-mdpi
    │       ├───mipmap-xhdpi
    │       ├───mipmap-xxhdpi
    │       ├───mipmap-xxxhdpi
    │       └───values
    │               colors.xml
    │               strings.xml
    │               styles.xml
    │
    └───test
Plain text

یادگیری زبان آسان میشود :)


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

فایل پایه را از اینجا دانلود کنید

تعریف پروژه: شمای کلی برنامه مانند شکل بالا است و عملکرد آن مانند یک فرهنگ لغت فارسی‌-‌انگلیسی است، با این تفاوت که لیست لغات توسط کاربر ویرایش می‌شود. در صفحه ابتدایی برنامه، لغت انگلیسی را در EditText با متن راهنمای word و ترجمه آن را در EditText با متن راهنمای defunition بنویسید.کلات و معنای آن‌ها باید در یک دیتابیس sqLite ذخیره شوند.

  • با لمس دکمه ADD، فقط درصورتی که کلمه در دیتابیس موجود نباشد به آن اضافه می‌شود. (هردو فیلد مربوط به لغت و ترجمه باید پر شوند)
  • با لمس دکمه Delete، فقط درصورتی که کلمه در دیتابیس موجود باشد از آن حذف می‌شود. (پر کردن فیلد word کافی است)
  • با لمس دکمه Update درصورت وجود کلمه، معنای آن با معنای جدید جایگزین می‌شود. (هردو فیلد مربوط به لغت و ترجمه باید پر شوند)
  • با لمس دکمه View All وارد Activity به نام DictionaryPage ‌می‌شویم (شکل سمت چپ) که در آن هر لغت به همراه معنای متناظر با آن به ترتیب جدید به قدیم در لیست نمایش‌ داده می‌شود.
  • با لمس دکمه search معنای لغت نوشته شده در EditText با متن راهنمای search_word جستجو می‌شود و درصورت وجود لغت، معنای آن در TextView پایین صفحه نمایش داده می‌شود و درصورت عدم وجود لغت در دیتابیس، عبارت word doesn't exist در آن نمایش داده می‌شود.
  • با لمس دکمه Quiz درصورتی که تعداد لغات موجود در دیتابی کمتر از چهار (۴) لغت باشد، هیچ اتفاقی نمی‌افتد و در صورتی که چهار کلمه یا بیشتر در دیتابیس موجود باشد، برنامه وارد صفحه وارد QuizActivity می‌شود. در این صفحه (همانطور که در gif موجود در صورت سوال می‌بینید) یک سوال چهارگزینه‌ای از میان لغات موجود در دیتابیس طرح می‌شود. به این صورت که بطور تصادفی یک کلمه انتخاب می‌شود و در TextView با آیدی quiz_question موجود در بالای صفحه نمایش داده‌می‌شود و معنای آن کلمه به همراه معنای سه کلمه دیگر (که این معناها هم بصورت تصادفی انتخاب شده‌اند) با یک ترتیب تصادفی بر روی چهار Button موجود در میانه صفحه نمایش داده می‌شوند. کاربر برای پاسخگویی به هر سوال تنها هشت (۸) ثانیه زمان دارد. درصورتی که در این زمان کاربر هیچ گزینه‌ای را انتخاب نکند، سوال جدیدی ایجاد می‌شود و نمایش‌ داده می‌شود. اگر قبل از اتمام زمان پاسخگویی به سوال، کاربر گزینه درست را انتخاب کند، در (۱۰) امتیاز به امتیاز فعلی او اضافه می‌شود (این امتیاز در پایین صفحه در TextView با آیدی current_score نمایش داده می‌شود). درصورت انتخاب گزینه غلط نیز بدون تغییر در امتیاز، سوال جدیدی نمایش داده می‌شود.

نکات مهم در پیاده‌سازی دیتابیس:

  • اطلاعات در دیتابیس با نام wordlist.db‍‍‍ و در جدول list ذخیره می‌شوند.
  • دیتابیس را در محل پیشفرض دخیره‌سازی دیتابیس‌ها (زیر مجموعه مسیر/data/data) ذخیره کنید.
  • برای کار با دیتابیس دسترسی به حافظه را استفاده نکنید.
  • شمای جدول را دقیقا به شکل زیر پیاده‌سازی کنید.
ColumnId ---> primary key auto Increment
Definition ---> TEXT
word ---> TEXT
Plain text

نکات حیاتی:🔗

  • مکان قرارگیری و نام انتخابی برای دیتابیس و جدول مورد استفاده را دقیقا برابر با موارد گفته‌شده و بدون هیچ پسوندی انتخاب کنید.
  • درصورتیکه حجم فایل zip ارسالی شما، بیشتر از حد مجاز بود، پوشه‌(های) build را در فایل ارسالی پاک کنید.
  • امکان استفاده از کتابخانه‌های آماده وجود ندارد و پیاده‌سازی‌ها باید توسط خودتان انجام شود.
  • آیدی و متن‌های نمایشی موجود در فایل‌های activity_main.xml ، dictionary_page.xml و list_item.xml را تغییر ندهید (حذف نکنید).
  • درصورتیکه به دسترسی‌ای نیاز دارید که در نسخه‌های جدید اندروید به شکل متفاوتی از کاربر گرفته‌می‌شود، حتما این تفاوت را درنظر بگیرید و تغییرات لازم را برای زمان شروع برنامه اعمال کنید.
  • دیتابیس را حتما در مسیر پیشفرض قرار‌دهید. (نیازی به دسترسی خواندن و نوشتن برروی حافظه خارجی ندارید)
  • پیاده‌سازی سوالات بخش Quiz باید به گونه‌ای باشد که دو سوال یکسان پشت‌سر هم نمایش‌داده نشوند. (منظور از دو سوال یکسان دو سوال با کلمه انگلیسی یکسان و گزینه‌های یکسان و ترتیب یکسان در گزینه‌ها است)
  • حتما از فایل WordListViewHolder.java و متغیر‌های عضو این کلاس متناسب با نام آن‌ها استفاده کنید. اعمال هرگونه تغییر در این فایل و فایل‌های دیگر پروژه که دارای پسوند java هستند بلامانع است اما از تغییر نام یا حذف کلاس‌ها، توابع و متغیر‌های موجود در فایل پایه خودداری کنید.

ساختار بخشی از فایل پایه بصورت زیر است. می‌توانید فایل‌هایی به پوشه java (یا زیر پوشه‌های آن) اضافه کنید. همچنین مجازید به فایل‌هایی که با علامت (---->) مشخص شده‌اند کد‌های خودتان را اضافه کنید (اما مجاز به تغییر یا حذف کد‌های موجود نیستید). درنهایت محتویات پوشه app را در قالب یک فایل فشرده ارسال کنید.

app
│
└───src
    └───main
        │   AndroidManifest.xml
        │
        ├───java
        │   └───com
        │       └───quera
        │           └───android
        │               └───dictionary
        │                   │   DictionaryPage.java           (<----)
        │                   │   MainActivity.java             (<----)
        │                   │
        │                   ├───adapters
        │                   │       WordListAdapter.java      (<----)
        │                   │
        │                   └───ViewHolders
        │                           WordListViewHolder.java   (<----)
        │
        └───res
            ├───drawable
            ├───layout
            │       activity_main.xml
            │       dictionary_page.xml
            │       list_item.xml
            │
            ├───mipmap-hdpi
            │
            ├───mipmap-mdpi
            │
            ├───mipmap-xhdpi
            │
            ├───mipmap-xxhdpi
            │
            ├───mipmap-xxxhdpi
            │
            └───values
                    colors.xml
                    dimens.xml
                    strings.xml
                    styles.xml
Plain text

ارتباط آسان


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

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

کارکرد برنامه:🔗

ابتدا دو کاربر باید به یک wifi متصل شوند، سپس یکی از آن دو باید در صفحه اصلی گزینه connect to me و دیگری گزینه connect to others را انتخاب کند. با انتخاب گزینه connect to me دستگاه اندرویدی مانند یک سرور برای چت عمل می‌کند و کاربر به صفحه ServerActivity انتقال داده می‌شود. در این صفحه ip و port ای که برای اتصال کاربر دوم درنظر گرفته شده، به ترتیب در TextView با آیدی text_ip و text_port نمایش داده می‌شوند. با انتخاب گزینه connect to others کاربر به صفحه ClientActivity منتقل می‌شود. در این صفحه ip و port نمایش داده شده توسط دستگاه اول، به ترتیب در EditText با آیدی edit_text_ip و edit_text_port وارد می‌شوند. پس از وارد کردن این اطلاعات، با لمس دکمه connect به محض برقراری ارتباط، هر دو دستگاه وارد صفحه MessageActivity می‌شوند که همان صفحه مخصوص چت است.

در صفحه چت با نوشتن متن مورد نظر درون EditText و لمس دکمه send در این صفحه، پیام برای کاربر دیگر ارسال می‌شود.

در صفحه چت، یک TextView با آیدی text_message نیز وجود دارد. این TextView همواره آخرین پیامی که کاربر از دستگاه دیگر دریافت کرده را نمایش می‌دهد و تا قبل از دریافت اولین پیام نیز هیچ متنی را نمایش نمی‌دهد.

نمونه پیام نمایش داده‌شده در تلفن همراه:

a test message
Plain text

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

{"message":"a test message"}
Plain text

نکات حیاتی:🔗

  • دقت کنید مقادیر نمایش داده‌شده در ServerActivity فاقد هرگونه کاراکتر اضافه باشند زیرا عینا همین مقادیر در ClientActivity وارد می‌شوند.
  • هر دو کاربر باید امکان دریافت و ارسال پیام را داشته باشند
  • درصورتیکه به دسترسی‌ای نیاز دارید که در نسخه‌های جدید اندروید به شکل متفاوتی از کاربر گرفته‌می‌شود، حتما این تفاوت را درنظر بگیرید و تغییرات لازم را برای زمان شروع برنامه اعمال کنید.
  • شما مجاز به استفاده از کتابخانه‌های آماده نیستید و پیاده‌سازی‌ها باید توسط خودتان انجام شود.
  • برای جلوگیری از بروز خطای حجم فایل ارسالی، قبل از ساخت و ارسال فایل zip دقت کنید که پوشه‌های build در این فایل وجود نداشته باشند.

ساختار بخشی از فایل پایه بصورت زیر است. می‌توانید فایل‌هایی به پوشه java (یا زیر پوشه‌های آن) اضافه کنید. همچنین مجازید به فایل‌هایی که با علامت (---->) مشخص شده‌اند کد‌های خودتان را اضافه کنید (اما مجاز به تغییر یا حذف کد‌های موجود نیستید). درنهایت محتویات پوشه app را در قالب یک فایل فشرده ارسال کنید.

app
│
└───src
    └───main
        │   AndroidManifest.xml                         <------
        │
        ├───java
        │   └───com
        │       └───quera
        │           └───messanger
        │               └───localmessanger
        │                       ClientActivity.java     <------
        │                       MainActivity.java       <------
        │                       MessageActivity.java    <------
        │                       ServerActivity.java     <------
        │
        └───res
            ├───drawable
            │
            ├───drawable-v24
            │
            ├───layout
            │       activity_client.xml
            │       activity_main.xml
            │       activity_message.xml
            │       activity_server.xml
            │
            ├───mipmap-anydpi-v26
            │
            ├───mipmap-hdpi
            │
            ├───mipmap-mdpi
            │
            ├───mipmap-xhdpi
            │
            ├───mipmap-xxhdpi
            │
            ├───mipmap-xxxhdpi
            │
            └───values
                    colors.xml
                    strings.xml
                    styles.xml
Plain text

لیست موزیک


در این سوال از شما می‌خواهیم صف آهنگ‌های درحال پخش یک موزیک پلیر را پیاده‌سازی کنید. فایل پایه را از اینجا دانلود کنید.

شمای کلی پروژه نهایی بصورت زیر است:

تعریف پروژه:🔗

شمای کلی پروژه نهایی مانند تصاویر بالا است و لیست کار‌های شما برای تکمیل این پروژه به شرح زیر است:

  • نمایش لیست آهنگ‌های در صف پخش
  • امکان ایجاد تغییر در ترتیب آهنگ‌ها
  • امکان حذف آهنگ از لیست پخش

جزئیات پیاده‌سازی وظایف🔗

نمایش لیست آهنگ‌های در صف پخش: برای ساده‌تر شدن این بخش، کافیست اطلاعات آهنگ‌های موجود در لیست پخش را از طریق فراخوانی تابع getMusicList دریافت کنید. این تابع، عضو static کلاس JudgeUtil است.

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

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

نکات حیاتی:🔗

  • برای جلوگیری از بروز خطای حجم فایل ارسالی، قبل از ساخت و ارسال فایل zip دقت کنید که پوشه‌های build در این فایل وجود نداشته باشند.
  • به هیچ‌وجه کد‌های موجود در هیچ‌یک از فایل‌های پروژه را پاک نکنید و یا تغییر ندهید.
  • در هیچ قسمتی از پروژه مجاز به استفاده از کتابخانه‌های آماده نیستید و پیاده‌سازی‌های خواسته شده را باید شخصا انجام دهید.
  • از اعمال تغییر در فایل JudgeUtil خودداری کنید.

ساختار بخشی از فایل پایه بصورت زیر است. می‌توانید فایل‌هایی به پوشه java (یا زیر پوشه‌های آن) اضافه کنید. همچنین مجازید به فایل‌هایی که با علامت (---->) مشخص شده‌اند کد‌های خودتان را اضافه کنید (اما مجاز به تغییر یا حذف کد‌های موجود نیستید). درنهایت محتویات پوشه app را در قالب یک فایل فشرده ارسال کنید.

app
│
└───src
    └───main
        │   AndroidManifest.xml
        │
        ├───java
        │   └───com
        │       └───quera
        │           └───android
        │               └───playlist
        │                       ItemModel.java        (<-----)
        │                       JudgeUtil.java        (<-----)
        │                       MainActivity.java     (<-----)
        │
        └───res
            ├───drawable
            │
            ├───drawable-hdpi
            │
            ├───drawable-mdpi
            │
            ├───drawable-v24
            │
            ├───drawable-xhdpi
            │
            ├───drawable-xxhdpi
            │
            ├───layout
            │       activity_main.xml
            │       music_item.xml
            │
            ├───mipmap-hdpi
            ├───mipmap-mdpi
            ├───mipmap-xhdpi
            ├───mipmap-xxhdpi
            ├───mipmap-xxxhdpi
            └───values
                    colors.xml
                    strings.xml
                    styles.xml
Plain text