نوشته‌ها

کار در خانه 4

برنامه‌نویسی در خانه (آزاد کار یا Freelancer) قسمت 1

میخواهم آزاد کار(Freelancer) شوم چکار باید بکنم؟(قسمت 1)

 

کار در خانه 4

 

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

تو این نوشتار میخوام به شما نکاتی را بگم که مطمئنا اگه تصمیم گرفتید تو خونه و بصورت آزاد کاری کار کنید خیلی میتونه بهتون کمک کنه.

 

 تخصص خود را انتخاب کنید.

 

خوشبختانه شما میدانید که د رچه حوزه کاری میخواهید کارتان را شروع کنید.

اگر این حرف من درسته میتونید از این مرحله رد شوید.یا اگر کاملا مطمئن نیستید یکبار دیگر بتوانید تصمیم خود را بررسی کنید.

برای آندسته از کسانی که باید تصمیم بگیرند که باید تصمیم بگیرند که آزاد کاری‌شان را روی چه مهارت و تخصصی پایه ریزی میکنند.

 

در این اینجا نکاتی را باید مد نظر قرار دهیم:

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

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

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

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

دوم اینکه ، فرض کنید شما یکسری مهرات دارید که می‌توانید برای شروع آزادکاری از آنها استفاده کنید. در این صورت نکته زیادی برای گفتن باقی نمی‌ماند.

فقط اینکه مطمئن شوید به اندازه کافی تقاضا برای این تخصص شما وجود دارد. پول درآوردن از مهارت و تخصصی که هیچ کس پولی بابت آن نمی‌دهد کاری سخت و دشوار بلکه غیر‌ممکن است.

 

اگر تخصص شما قابل تحمل نیست شما دو گزینه دارید:

اول اینکه آزاد کاری را فراموش کرده و به دنبال یک شغل ثابت باشید.من خودم شخصا این یکی را انتخاب می‌کنم.

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

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

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

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

 

اولین کاری که باید بکنید اینه که باید اول نمونه کاری از خودم داشته باشید.

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

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

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

 

اگر نمی‌توانید نمونه‌هایی که کار شما را به نمایش بگذارید تولید کنید باید شکست را قبول کنید.یک نمونه کاری می‌تواند به اندازه خود شما در بازاریابی محصولتان سازنده باشد.

ارائه یک کار بی‌کیفیت یا احتمالا هیچ چیزی، شما را به خطر خواهد انداخت و کار شما را به شکست منجر خواهد کرد.

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

 

اینجا دو گزینه وجود دارید:

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

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

نقطه روشن انجام پروژه جانبی یا کار مجانی اینست که شما یک شانسی برای تمرین کردن مهارتهایی که می‌خواهید در آینده بفروشید دارید.

چی از این بهتر که با اختصاص دادن زمانی برای تمرین کردن بتوانید به تریج بهتر و بهتر شوید.از آن گذشته با توانمند شدن شما در ارائه خدمات یا محصولاتتان در آینده مشتریان قابل اعتماد‌ تری را جذب خواهید کرد.بله ،کمی دشوار خواهد بود ولی در آخر به درد خواهد خورد.

 

قبل از اینکه برویم سراغ نکته بعدی ،این کارو انجام ندید. چه کاری؟

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

فکر می‌کنم لازم نیست بهتون بگم که چقدر متقاعد کردن مشتریان  درمورد مهارتتان بدون ارائه یک نمونه کاری سخته.

خواهش می‌کنم شما این اشتباهات را انجام ندهید.

نمونه کاری شما مثل کارت اعتباری آنلاین شما می باشد.

 

 

برای اینکه بتوانیم پروژه اندرویدی بگیریم چه مهارتهایی نیازمندیم؟

برای اینکه بتوانیم پروژه اندروید بگیریم چه مهارتهایی نیازمندیم؟

 

 

 

سوال اصلی اینه :

 

برای گرفتن پروژه اندرویدی چه چیزهایی یاد بگیریم؟

 

این سوال ممکنه سوال ذهن خیلی از دوستانی که تازه شروع کردن و یا برنامه نویسی بلدن و به فکر افتادن که برنامه نویسی اندروید یاد بگیرن تا بتونن پروژه اندروید بگیرن یا اپلیکیشن های خودشونو تولید کنن و واسه فروش تو کافه بازار و google play  و مارکتهای دیگه بزارن.

 

اگه تصمیم گرفتید اندروید کار کنید سمت xamarin  و basic4android  نرید؛

سوالا اینا هستن :

 

چقدر باید به زبان جاوا تسلط داشته باشیم؟

 

و به جز کدهای مربوط به اندروید و مفاهیم موجود تو برنامه نویسی موبایل به چه ابزار ها و مهارتهای دیگه‌ای نیازمندیم؟

 

اگه بخواید تو eclipse یا اندروید استودیو برنامه نویسی کنید که پیشنهاد من اندروید استودیوست.

بسته به اینکه تو چه سطحی میخواید پروژه بنویسید تو اندازه توانایی شما در زبان جاوا تعیین کنندست.

بالاخره برنامه‌نویسی اندروید بر پایه زبان جاوا بنا شده پس دونستن مفاهیم پایه‌ای و syntax جاوا ضروریه. ولی تو بعضی پروژه‌های ساده مثل نوشتن کتاب؛ یا اپلیکیشن برای یه وبسایت ساده یا وبلاگ و برنامه‌های ساده خیلی نیاز نیست تو جاوا, برنامه‌نویس حرفه‌ای باشید.

 

ولیکن اگه بخواید یه برنامه‌نویس تمام عیار باشید که از پس هر پروژه‌ای بر بیایید باید به جاوا مسلط باشید.

 

و اما سوال دوم:

چه ابزار ها و مهارتهای دیگه‌ای نیازمندیم؟

 

 

نه تنها تو برنامه ‌نویسی موبایل؛ بلکه تو هر پروژه دیگه‌ای که دیتابیس داره باید کم و بیش Sql  بلد باشید تا از پس قسمت ارتباط با دیتابیس بر بیایید.

پس مفاهیم اولیه پایگاه داده و کمی دونستن زبان sql  کفایت میکنه.

 

از اونجایی که بیشتر وبسایتهای موجود یا با php  نوشته شدن یا مثل وردپرس از  php استفاده شده بلد بودن php  میتونه شما رو از برنامه نویس‌های وب بی‌نیاز کنه.

Php زبان برنامه‌نویسی بسیار ساده‌اییه و کسی که قبلا جاوا کار کرده یاد گرفتن php واقعا کار راحتیه.

 

بعد از این زبانهای برنامه‌نویسی که اسم بردم بلد بودن مفاهیم سرور, آپ کردن و down کردن سرور هم میتونه خیلی بهتون کمک کنه.

بازار کار کدام زبان برنامه نویسی بهتراست؟

بازار کار کدام زبان برنامه نویسی بهتراست؟

 

 

 

این سوالو جور دیگه‌ای هم میشه  پرسید:

برای موفقیت اپلیکیشن موبایلمان چه استراتژی داشته باشیم؟

 

خوب البته این سوال یه کم جنراله؛ کلا اگه بخوام بگم برنامه نویس نه تو ایران و نه تو هیچ کجای دنیا بیکار نمیمونه.دلیلش اینه که عصر تکنولوژیه و نیاز برای برنامه‌نویس زیاده.

 

بخصوص زبانهای برنامه نویسی مرتبط با موبایل و وب سایت.

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

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

ولی الان اوضاع فرق کرده نه اینکه کار کمتر باشه نه؛زبانهای برنامه نویسی که در حال حاضر مشتری داره فرق کرده.

از دو جنبه باید به موضوع نگاه کرد یکی بازار کار گسترده دوم پولساز بودن اونه.

 

تو این بازار اگه C#.NET  کسی بلد باشه بیکار نمیمونه و میتونه یه حقوق نرمال داشته باشه.که البته هر چقدر حرفه‌ای تر باشی و رزومه ‌ات پر بار تر باشه خواهان بیشتری داری و پول بیشتری هم بهت میدن.

تو حوزه وب زبانهایی مثل PHP  هم بازار نسبتا خوبی داره ولی حقوقش کمتره.

 

تخصص هایی مثل ادمین دیتابیس چه اراکل و چه SqlServer  شاید کمتر خواهان داشته باشه به این دلیل که هر سازمان به یه ادمین بیشتر احتیاج نداره؛ درسته کمتر خواهان داره, ولی متخصصش هم کمه و راحت میشه کار گیر آورد و حقوق خوبی هم برای یه ادمین دیتابیس میدن.

 

 

و اما زبان برنامه نویسی مورد علاقه خودم و تخصص خودم جاوا(JAVA)  .

که همین تخصص هم باعث شد بیام سراغ برنامه نویسی موبایل و برنامه نویسی اندروید؛ که هم  بازار خوبی داره هم پول خوبی میدن .

هم میتونید پروژه خوب بگیرید و هم میتویند خودتون اپلیکیشن تولید کنید و تو کافه بازار و googleplay  و جاهای دیگه به فروش بگذارید.

 

پس اگه بخوام بحثو خلاصه کنم اگه میخواید تازه شروع کنید پیشنهاد اول و آخرم برنامه نویسیه اندرویده.که البته کمی دیتابیس و php  هم باید بلد باشید.

و اگه در حال حاضر برنامه نویس هستید پیشنهاد میکنم وقتو تلف نکنید و اندروید رو یاد بگیرید که آینده متعلق به موبایله و تکنولوژی های مرتبطه.

برنامه نویس شدن بدون تحصیلات

آیا برای برنامه‌نویس شدن باید تحصیلات دانشگاهی مرتبط داشته باشم؟

 

 

 

 

جواب این سوال یه ” نه ” بزرگه.

 

ولی چرا جواب من برای این سوال نه ست؟

 

در طول سالهای زیادی که برنامه نویس بودم و تو جمع برنامه‌نویس‌های زیادی کار کردم و تو شرکتهایی که مشغول کار بودم؛

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

 

یکی از بهترین برنامه‌نویس‌هایی که تا حالا دیدم رشته دانشگاهیش شیمی بوده.  یعنی جوری برنامه نویسی میکرد که انگار زبان مادریشه.

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

از همکارای دیگه‌ا‌م بودن که صنایع خونده بودن.

 

یا داشتیم موردی که فوق دیپلم مکانیک بود. حتی داشتیم موردی که دیپلم بود و اساسا تحصیلات آکادمیک نداشت.

اصلا میخوام تو این نوشته چی بگم و منظورم از نوشتن این چند خطه چیه؟

اگه دانشگاه رفته باشید حتما دیدید که 70 درصد دروس دانشگاهی هیچ ارتباطی به اسم اون رشته تحصیلی نداره. بقییه درسها هم یه سری مطالب تئوریه که هیچ استفاده‌ای تو مهارتی که قراره تو آینده و تو بازار کار به کارتون بیاد, نداره.

 

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

 

به نظر من تنها چیزی که نیاز دارید برای اینکه برنامه‌نویس بشید علاقه‌ست و پشتکار .

 

به نسبت حرفه‌های دیگه ای که تو بازار هست یاد گرفتن برنامه‌نویسی کار به مراتب راحتریه.

زمان کمتری هم میخواد. و میشه از طریق اینترنت با فیلمهای آموزشی زیادی که وجود داره یاد گرفت.

 

پس اگه دانشجو هستید صرفنطر از رشته دانشگاهیتون برنامه نویسی یاد بگیرید.

 

اگه دیپلم گرفتید و میخواید یه حرفه یاد بگیرید که سریعتر مشغول کار بشید برنامه نویسی یاد بگیرید.

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

از لحظه ای که برنامه نویسی یاد گرفتید دیگه تا آخر عمر نگران بیکار بودن نخواهید بود. چون این شمایید که واسه شرکتها ناز میکنید.

هر وقت خواستن تعدیل کنن برنامه نویسها آخرین کسایی هستن که اخراج میشن. چرا؟

چون پیدا کردن دوباره یه برنامه نویس خوب براشون خیلی سختتره.

 

اصلا گوش به این حرفهایی که میگن برنامه نویسی یه استعداد بخصوصی میخواد ندید. همه میتونن برنامه نویسی بشن .

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

 

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

پس این حرفای منو پشت گوش نندازید و این لحظه رو غنیمت بشمرید.

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

چگونه یک اسلایدر به اکتیویتی اضافه کنیم؟

چگونه یک اسلایدر به اکتیویتی اضافه کنیم؟

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

تو فایل gradle کتابخونه‌ها رو به ترتیب یر اضافه می‌کنیم:

compile “com.android.support:support-v4:+”
compile ‘com.squareup.picasso:picasso:2.3.2’
compile ‘com.nineoldandroids:library:2.4.0’
compile ‘com.daimajia.slider:library:1.1.5@aar’

با اضافه کردن این کتابخونه‌ها اندروید استودیو نیاز به دانلود کتابخونه‌هایی داره که تو sdk  وجود نداره.پس فراموش نکنید حتما فیلتر شکنتون رو اجرا کنید.

 

بعد از اضافه کردن کتابخونه ها باید permission  های مورد نیاز را در فایل AndroidManifest.xml تعریف کنید:

 

<uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE” />
<uses-permission android:name=”android.permission.INTERNET” />

 

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

<com.daimajia.slider.library.SliderLayout
android:id=”@+id/slider”
android:layout_width=”match_parent”
android:layout_height=”200dp” />

 

و در MainActivity.java   ؛ SliderLayout  را که در فایل Layout اضافه کرده بودیم تعریف می‌کنیم:

SliderLayout sliderShow = (SliderLayout) findViewById(R.id.slider);
TextSliderView textSliderView = new TextSliderView(this);

 

 

تو کد بالا ابتدا SliderLyout و TextSliderView را تعریف می‌کنیم و شرح تصویر و خود تصویر را بهش اضافه می‌کنیم:

textSliderView
.description(“Game of Thrones”)
.image(“http://images.boomsbeat.com/data/images/full/19640/game-of-thrones-season-4-jpg.jpg”);

sliderShow.addSlider(textSliderView);

حالا کافیه یه آرایه تعریف کنیم و آدرس تصاویر و نام تصویر را داخل آرایه بریزیم و با یم حلقه طبق مثال بایل به SliderView ‌ی که تعریف کردیم اضافه کنیم. کد کامل را براتون میزارم:

 


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.daimajia.slider.library.SliderLayout;
import com.daimajia.slider.library.SliderTypes.BaseSliderView;
import com.daimajia.slider.library.SliderTypes.TextSliderView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements BaseSliderView.OnSliderClickListener{
ArrayList<String> urlPics;
ArrayList<String> names;
@Override
protected void onCreate(Bundle savedInstanceState) {
urlPics = new ArrayList<>();
names = new ArrayList<>();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SliderLayout sliderShow = (SliderLayout) findViewById(R.id.slider);
urlPics.add(“http://webenik.com/wp-content/uploads/2017/11/android1kjh.jpg”);
urlPics.add(“http://webenik.com/wp-content/uploads/2017/11/Programming-for-Kids-e1465336734364.jpg”);
urlPics.add(“http://webenik.com/wp-content/uploads/2017/12/51ea53b6f14e2a5ea05d98834444.jpg”);
urlPics.add(“http://webenik.com/wp-content/uploads/2017/11/programming-mistakes.jpg”);

names.add(“android”);
names.add(“Kids”);
names.add(“design”);
names.add(“pack”);

for(int i =0  ;i<urlPics.size();i++){
TextSliderView textSliderView = new TextSliderView(this);
textSliderView.image(urlPics.get(i))
.setScaleType(BaseSliderView.ScaleType.Fit)
.setOnSliderClickListener(this);
textSliderView.bundle(new Bundle());
textSliderView.getBundle()
.putString(“extra”,names.get(i));
sliderShow.addSlider(textSliderView);
}

}

@Override
public void onSliderClick(BaseSliderView slider) {

}
}

 

ایجاد صفحه اسپلش (Splash Screen)

چگونه در اندروید صفحه اسپلش (Splash Screen) بسازیم؟

 

 

همینطور که تو اپلیکیشن‌های مختلف دید اکثرشون Splash Screen دارن. منم تصمیم گرفتم آموزش ایجاد Splash Screen  رو براتون بزارم.امیدوارم به کارتون بیاد.

همینجور که تو آموزشهای قبلی دیدید من سعی می‌کنم از کوتاهترین مسیر برم جلو و از زیاده‌گویی پرهیز کنم. که هم زودتر به نتیجه برسیم و هم از اتلاف وقت جلوگیری بشه.

ابتدا یه اکتیویتی با هر اسمی که استاندارد نام‌گذاری خودتون تو پروژه‌تون دارید ایجاد میکینم.من اینجا اسمشو میزارم ActivitySpl.

 

درون Acticity_spl.xml  ؛ یک ImageView  ایجاد می‌کنیم و تنظمیات زیر را اضافه می‌کینم.

فقط قبل از هر کاری لوگو خودتونو درست کنید و سایزشو برای اکیتیویتون تنظیم کنید.

<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:tools=”http://schemas.android.com/tools”
android:id=”@+id/activity_spl”
android:orientation=”vertical”
android:background=”#ffffff”
android:gravity=”center”

android:layout_width=”match_parent”
android:layout_height=”match_parent”
tools:context=”rena.myapplication.ActivitySpl”>
<ImageView
android:layout_width=”wrap_content”
android:src=”@drawable/lgogforlearn”
android:layout_height=”wrap_content” />
</LinearLayout>

اگه به کد نگاه کنید متوجه میشید که پس زمینه رو سفید گذاشتم و تصویر لوگو هم اسمشو تو قسمت src  ست کردم.

قدم بعدی اینه که یه Style جدید ایجاد کنیم تا به ProgressBar مون تخصیص بدیم.

اول فایل colors.xml را باز میکینیم و یه colorAcent  جدید ایجاد می‌کنیم:

<color name=”colorSplAccent”>#a2fc43</color>

 

بعد تو فایل AndroidManifest.xml تم اکتیویتی اسپلش رو تغییر میدیم به تم جدید:

<activity android:name=”.ActivitySpl” android:theme=”@style/ActivitySpl”>

 

حالا تو فایل Styles.xml خط زیر را اضافه می‌کنیم:

<style name=”ActivitySpl” parent=”Theme.AppCompat.Light.NoActionBar”>

<item name=”colorPrimary”>@color/colorPrimary</item>
<item name=”colorPrimaryDark”>@color/colorPrimaryDark</item>
<item name=”colorAccent”>@color/colorSplAccent</item>

حالا یه ProgressBar  هم اضافه میکنیم تا در لحظه‌ای که برنامه میخواد اجرا بشه و تو اون چند ثانیه انتظار نمایش داده بشه.

<ProgressBar
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
style=”@style/Widget.AppCompat.ProgressBar”/>

 

بعد از نوشتن کدهامون یه AndroidManifest.xml را باز می‌کنیم تا تغییرات لازم را بدهیم.

اگه همه چیز را همونجور که بهتون گفتم انجام داده باشید باید اکتیویتی splash  باید اونجا تعریف شده باشه.

فقط موضوعی که هست اینه که چون اکتیویتی اسپلش باید قیل از همه اکتیویتی‌ها اجرا بشه باید جای MainAticvty را با ActivitySpl عوض کنیم تا اکتیویتی لانچر(LUNCHER ) ActivitySpl بشه.

 

<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”rena.myapplication”>

<application
android:allowBackup=”true”
android:icon=”@mipmap/ic_launcher”
android:label=”@string/app_name”
android:supportsRtl=”true”
android:theme=”@style/AppTheme”>
<activity android:name=”.ActivitySpl”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />

<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
<activity android:name=”.MainActivity”></activity>
<activity android:name=”.Main2Activity” />

</application>

</manifest>

 

نتیجه کار رو میتونید ببینید:

 

به‌طور معمول تو قسمت اسپلش وقتی اون زمان انتظار برای بالا اومدن برنامه طی میشه کدهای مربوط به اتصال به دیتابیس و برقراری ارتباط با سرور نوشته میشه و در صورت نبودن هیچ مشکلی تو ارتباط برنامه بالا میاد و اکتیویتی اصلی اپلیکیشن باز میشه.

من اینجا فقط چند ثانیه توقف ایجاد شده و انتقال به MainActivity  را براتون می‌نویسم تا تو آموزشهای بعدی که اتصال به دیتابیس را آموزش دادم کدهای مربوطه را بهش اضافه کنیم.

تو ActivitySpl.java  کدهای زیر را برای ایجاد delay و باز کردن MainActivity می‌نویسیم:

 

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spl);

int secondsDelayed = 1;
new Handler().postDelayed(new Runnable() {
public void run() {
startActivity(new Intent(G.context,MainActivity.class));
finish();
}
}, secondsDelayed * 5000);
}

کدی که اینحا نوشتیم کد بسیار ساده برای ایجاد  توقف چند ثانیه‌ای است. تون عدد 5000  که میبینید به میلی ثانیه است یعنی تو برنامه ما توقف 5 ثانیه خواهد بود .

 

ایجاد تولبار و اضافه کردن لوگو و آیکون به تولبار

ایجاد تولبار و اضافه کردن لوگو و آیکون  به تولبار

 

ما میخواهیم یه تولبار برای برنامه‌مون تعریف کنیم و چند تا آیکون مورد نیازمون رو بهش اضافه کنیم.

اول باید تم برنامه رو به حالت NoActionBar  تغییر بدیم تا تولبار پیش فرض رو نمایش نده.

فایل styles.xml  رو در فولدر res/values باز می‌کنیم و تم رو که DarkActionBar  را به NoActionBar  تغییر میدیم.

<resources>

<!– Base application theme. –>
<style name=”AppTheme” parent=”Theme.AppCompat.Light.NoActionBar”>
<!– Customize your theme here. –>
<item name=”colorPrimary”>@color/colorPrimary</item>
<item name=”colorPrimaryDark”>@color/colorPrimaryDark</item>
<item name=”colorAccent”>@color/colorAccent</item>
</style>

</resources>

در فولدر  layout فایلی یا لایه‌ای بنام toolbar.xml ایجاد می‌کنیم. و تگی بنام toolbar  تعریف میکنیم مانند کد زیر:

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical” android:layout_width=”match_parent”
android:layout_height=”match_parent”>
<android.support.v7.widget.Toolbar
android:layout_width=”match_parent”
android:background=”#ffcc00″
android:layout_height=”?attr/actionBarSize”>
<LinearLayout
android:orientation=”horizontal”
android:layout_width=”match_parent”
android:layout_height=”match_parent”>

</LinearLayout>
</android.support.v7.widget.Toolbar>
</LinearLayout>

 

بعد به اکتیویتی ActivityMain   میریم و toolbar  ایجاد شده را اضافه می‌کنیم.

<include layout=”@layout/toolbar”/>

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

 

اون قسمت زرد رنگ بالای برنامه تولبار ایجاد شده توسط شماست.

بعد از ایجاد تولبار اختصاصی خودمون باید آیکون‌های مروبط به برنامه‌مون رو اضافه کنیم.

قبل از کد نویسی برید به سایتهای دانلود آیکون مثل flaticon.com و غیره  آیکون‌های مورد نیازتون رو دانلود کنید.

 

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

 

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

من کد نهایی رو براتون میزارم شما فقط کافیه نام آیکونهای خودتونو جایگزین کنید.ولی پیشنهاد می‌کنم برای یکبار هم که شده خودتون بدون این کدها اینمارو از اول تا آخر انجام بدید.

 

 

<?xml version=”1.0″ encoding=”utf-8″?>
<?xml version=”1.0″ encoding=”utf-8″?>

<android.support.v7.widget.Toolbar android:layout_width=”match_parent”
android:background=”#f0e910″
android:layout_height=”?attr/actionBarSize”
xmlns:android=”http://schemas.android.com/apk/res/android”>

<LinearLayout
android:orientation=”horizontal”
android:gravity=”center”
android:layout_width=”match_parent”
android:layout_height=”match_parent”>

<LinearLayout
android:layout_width=”wrap_content”
android:orientation=”horizontal”
android:layout_weight=”1″
android:layout_height=”wrap_content”>

<LinearLayout
android:id=”@+id/linearFilnalBasket”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”>
<TextView
android:id=”@+id/txtBasketCont”
android:textSize=”16dp”
android:textColor=”#ffffff”
android:text=”1″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content” />

<ImageView
android:id=”@+id/serch”
android:layout_width=”32dp”
android:src=”@drawable/settings”
android:scaleType=”fitCenter”
android:layout_height=”32dp” />

</LinearLayout>

<ImageView
android:layout_marginRight=”32dp”
android:scaleType=”centerCrop”
android:layout_width=”32dp”
android:layout_gravity=”center_vertical”
android:src=”@drawable/emails”
android:id=”@+id/hambergurMenu”
android:layout_height=”32dp” />

</LinearLayout>

<LinearLayout
android:layout_gravity=”right”
android:padding=”0dp”
android:orientation=”horizontal”
android:gravity=”left”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”>

<ImageView
android:layout_marginRight=”32dp”
android:scaleType=”fitCenter”
android:layout_width=”100dp”
android:id=”@+id/digikala”
android:src=”@drawable/aaaabi”
android:layout_height=”wrap_content” />

<ImageView
android:layout_width=”32dp”
android:src=”@drawable/help”
android:layout_marginRight=”32dp”
android:scaleType=”fitCenter”
android:layout_height=”32dp” />

</LinearLayout>

</LinearLayout>

</android.support.v7.widget.Toolbar>

فعال و غیر فعال کردن wifi و blutooth

فعال و غیر فعال کردن wifi و blutooth

قبل از هر اقدامی و نوشتن هر کدی ابتدا باید permission  ها را در فایل AndroidManifest.xml تعریف کنیم.

 

کدهای زیر را در فایل AndroidManifest.xml  کپی کنید:

<uses-permission android:name=”Android.permission.BLUETOOTH_ADMIN” />
<uses-permission android:name=”Android.permission.BLUETOOTH” />
<uses-permission android:name=”Android.permission.ACCESS_WIFI_STATE” />
<uses-permission android:name=”Android.permission.CHANGE_WIFI_STATE” />

خوب حالا برای فعال کردن این قابلیت‌ها میتونید از Checkbox  یا RadioButton  یا یه دکمه معمولی استفاده کنید تا کدهای مربوطه را برای فعال و غیرفعال کردنشون  در اونها قرار دهید.

ToggleButton btwifi;
ToggleButton btbluetooth;   protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_enable);
btwifi = (ToggleButton)findViewById(R.id.btwifi);
btbluetooth = (ToggleButton)findViewById(R.id.btbluetooth);

}

 

 

 

بعد از اینکه دکمه ها را تعریف کردیم باید آداپتورهای مربوط به Bluetooth  و Wifi  را هم تعریف بکنیم:

final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
final WifiManager manager=(WifiManager)getSystemService(WIFI_SERVICE);

 

حالا وقتی برنامه اجرا میشه باید ببینیم اگه bluetoth  و wifi  روشنه دکمه را به حالت روشن و اگه خاموشه به حالت روشن دربیاره یعنی همون On و Off  :

if (bluetoothAdapter.enable()){
btbluetooth.setChecked(true);
}else{
btbluetooth.setChecked(false);
}

if (manager.isWifiEnabled()){
btwifi.setChecked(true);
}else{
btwifi.setChecked(false);
}

 

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

btbluetooth.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (btbluetooth.getText().equals(“ON”)){
bluetoothAdapter.enable();
}else{
bluetoothAdapter.disable();
}
}
});

btwifi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (btwifi.getText().equals(“ON”)) {
manager.setWifiEnabled(true);
}else{
manager.setWifiEnabled(false);
}
}
});

 

 

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

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

استفاده از GPS در اندروید

استفاده از GPS  در اندروید

اگه میخواید استفاده از GPS  رو مطالعه کنید ابتدا  آموزش مربوط به استفاده از نقشه گوگل رو ببینید بعد بیایید سراغ این آموزش.

اگه شما نوع اکتیویتی را GoogleMap  انتخاب کرده باشید تو کدهای ایجاد شده در MainActivity   مکان پیش فرض شما در نقشه که با مختصات نقطه مورد نظر مقدار دهی میشه قسمتی داریم که میتونید نوع مکان نما را مشخص کنید.

LatLng tehran = new LatLng(32, 53);
mMap.addMarker(new MarkerOptions().position(tehran).title(“Marker in Iran”).snippet(“لواسان”).icon(BitmapDescriptorFactory.fromResource(R.drawable.placeholder)));

 

حالا برای استفاده از GPS از کد زیر را در متد OnCreate() می‌نویسیم:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

بر روی پیغام خطا کلیک کنید و خود اندروید استودیو یه سری کدهای دیگه اضافه می‌کنه؛ مبنی بر اینکه اگر موبایل شما ساپورت نکنه از برنامه خارج بشه.

کد اضافه شده در حقیقیت شرط کنترل ورژن اندروید شماست:

if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

return;
}

که ما خودمون خط زیر را اضافه میکنیم:

else{
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

کدهای مربوط به گرفتن مختصات به شکل زیره که تو متد onLocationCahnged()  باید اضافه بشه:

int latitude = (double) (location.getLatitude());
int longitude = (double) (location.getLongitude());

که می‌تونید با یه پیغام این مقادیر را نمایش بدید یا با دستور زیر تو log  نمایش بدید.

Log.i(“Geo_Location”, “Latitude: ” + latitude + “, Longitude: ” + longitude);

 

برای نشان دادن مکان فعلی شما در نقشه با نشانگر ابتدا متغیر زیر را تعریف می‌کنیم:

public LatLng myLoc;

بعد درادامه  متد onLocationChanged()  با مقداردهی متد LatLng()  با مقادیری که از GPS  گرفتیم بجای مختصات پیش فرض مکان فعلی شما در نقشه نشان داده می‌شود:

myLoc=new LatLng(latitude, longitude);

ومقادیر کدهای بعدی را به شکل زیر تغییر می‌دهیم:

mMap.addMarker(new MarkerOptions().position(myLoc).title(“Marker in Iran”).snippet(“محل فعلی”).icon(BitmapDescriptorFactory.fromResource(R.drawable.placeholder)));

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(myLoc,10));

 

 

در پایان کل کلاس MainActivity() که برای GPS  نوشته بودیم را براتون میزارم تا یه موقع این بتونید یک جا ازش استفاده کنید:

package rena.mymap;

import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener {
public double latitude=0;
public double longitude=0;
private GoogleMap mMap;
public LatLng myLoc;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

LocationManager locationManager = (LocationManager) getSystemService(this.LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

return;
}else{
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

}

@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
LatLng tehran = new LatLng(32, 53);

}

@Override
public void onLocationChanged(Location location) {
latitude = (double) (location.getLatitude());
longitude = (double) (location.getLongitude());
myLoc=new LatLng(latitude, longitude);
mMap.addMarker(new MarkerOptions().position(myLoc).title(“Marker in Iran”).snippet(“لواسان”).icon(BitmapDescriptorFactory.fromResource(R.drawable.placeholder)));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(myLoc,10));
Log.i(“Geo_Location”, “Latitude: ” + latitude + “, Longitude: ” + longitude);
}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {

}

@Override
public void onProviderEnabled(String s) {

}

@Override
public void onProviderDisabled(String s) {

}

}

اتصال به سرور در اندروید

اتصال به سرور در اندروید

در ابتدا کارpermission  مربوطه را در فایل AndroidManifest.xml اضافه می‌کنیم:

<uses-permission android:name=”android.permission.INTERNET” />

 بعد  یک دکمه می‌سازیم تا کد مربوط به اتصال را درون آن بنویسیم.

 

و متغیر  و دکمه را در MainActivity  تعریف می‌کنیم:

 

public class MainActivity extends AppCompatActivity {
public static String dataServer=””;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnServer =(Button)findViewById(R.id.btnServer);
}
}

 

 

 

یک جاوا کلاس با نام Conn.java می‌سازیم:

import android.os.AsyncTask;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

/**
* Created by alizadeh-ma on 01/03/2018.
*/

public class Conn   extends AsyncTask{
public String link=””;

public Conn(String link)  {
this.link=link;
}

@Override
protected Object doInBackground(Object[] objects){
try{

          URL url=new URL(link);
URLConnection connection =url.openConnection();
BufferedReader bufferedreader =new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder stringBuilder=new StringBuilder();
String data = null;
while ((data=bufferedreader.readLine())!=null){
stringBuilder.append(data);
}
MainActivity.dataServer =stringBuilder .toString();
}
catch (Exception e){
e.printStackTrace();
}
return null;
}
}

حالا کد اتصال را در هنگام کلیک دکمه فراخوانی می‌کنیم:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
public static String dataServer=””;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Conn(“http://webenik.com/android/index.php”).execute();
Button btnServer =(Button)findViewById(R.id.btnServer);
btnServer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// کدهای بعد از اتصال
}
});

             }
}