اکثر دستگاه های اندرویدی دارنده حسگرهای داخلی میباشند که تکان ، جهت گیری و حالت گوناگون محیطی را اندازه گیری می نمایند. سیستم ادله اندروید از سه تیم کبیر حسگر دفاع می نماید.
حسگرهای حرکتی
حسگرهای محیطی
حسگرهای موقعیتی
برخی از حسگرها مبنی بر hardware و برخی دیگر نیز حسگرهای قابل انعطاف افزاری میباشند. طراحی اپلیکیشن در مشهد حسگر هر چه باشد ، اندروید به ما قابلیت میدهد داده های ناپخته را از این حسگرها بدست رایاپارس آوریم و از آن ها در اپ خویش به کارگیری کنیم. برای این اندروید کلاس هایی را نیز به ما ارائه میدهد.
اندروید کلاس های SensorManager و Sensor را برای به کار گیری از حسگرها در نرم افزار ما آماده نموده است. application برای استعمال از حسگرها ، اولین کاری که می بایست اجرا دهید این میباشد که یک شیئ از کلاس SensorManager را مثال سازی نمائید. به طور پایین این فعالیت را جاری ساختن میدهیم:
SensorManager sMgr;
sMgr = (SensorManager)this.getSystemService(Context.SENSOR_SERVICE);
آیتم آینده که بایستی اعمال دهید این میباشد که با فراخوانی روال () getDefaultSensor از کلاس SensorManager ، شیئ از کلاس Sensor را مثال سازی فرمایید. به عنوان مثالً در کد پایین دسترسی به حسگر نوری را مهیا میکنیم:
Sensor light;
light = sMgr.getDefaultSensor(Sensor.TYPE_LIGHT);
بعداز دسترسی به حسگر به طور بالا ، می بایست مستمع ای برای آن تصویب نمائید و دو سیاق onAccuracyChanged و onSensorChanged را override نمایید. به طور تحت:
sMgr.registerListener(this, light,SensorManager.SENSOR_DELAY_NORMAL);
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
}
اخذ لیست حسگرهای امان گردیده
با فراخوانی اسلوب getSensorList میتوانید لیستی از حسگرهای جانبداری گردیده به وسیله دستگاه خویش را بدست آورید ، که لیستی از حسگرها دربردارنده اسم و شماره ورژن و داده ها بسیار بیشتری را به شما گشوده می گرداند. آنگاه میتوانید این لیست را پیمایش نمایید تا داده ها را بدست آورید. به طور تحت:
sMgr = (SensorManager)this.getSystemService(Context.SENSOR_SERVICE);
List list = sMgr.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor: list){
}
به غیر از این متدها ، متدهای دیگری نیز وجود دارااست که به وسیله کلاس SensorManager برای مدیر حسگرها ارائه شدهاست. این متدها در ذیل نام برده میباشد:
Sr.No
مشی ها و توضیحات
1
getDefaultSensor(int type)
این روال حسگر پیشفرض از هر نوع دلخواه را میدهد
2
getInclination(float[] I)
این اسلوب زاویه شیب ژئومغناطیسی را برحسب رادیان با به کارگیری ماتریس شیب به حساب آوردن می نماید
3
registerListener(SensorListener listener, int sensors, int rate)
این مشی مستمع ای برای حسگر به ثبت می رساند
4
unregisterListener(SensorEventListener listener, Sensor sensor)
این مشی مستمع ای که تا قبل از اینً برای حسگر تصویب گردیده بود را کنسل به ثبت می رساند
getOrientation(float[] R, float[] values)
این مشی جهت گیری دستگاه را بر طبق ماتریس چرخش احتساب می نماید
getAltitude(float p0, float p)
این مشی طول را بر حسب متر از فشار جو و فشار در سطح دریا احتساب می نماید
در اینجا مثالی مشاهده کنید که به کار گیری از کلاس SensorManager را آرم میدهد. این نمونه نرم افزار معمولی ای میباشد که به شما قابلیت میدهد لیستی از حسگرهای دستگاه خویش را ملاحظه کنید.
برای تست این نمونه ، میتوانید آن را روی دستگاه حقیقی وواقعی یا این که مشابه ساز جاری ساختن فرمائید.
کارهایی که تا این مرحله اعمال دادیم مرتبط با تمجیدطراحی اپلیکیشن در مشهد دیتابیس و جداول آن بود. حال فرصت به کار گیری از این جداول برای وارد کردن اطلاعات یا این که قرائت اطلاعات و یا این که تغییر تحول اطلاعات میباشد. پیش از استعمال از Room می بایست شیئی از نوع دیتابیسی که در مرحله گذشته تمجید کردیم بدست آوریم. کد مرتبط با دسترسی بدین شی را در اسلوب onCreate از کلاس Application می نویسیم. رایاپارس در صورتیکه تا قبل از اینً این کلاس را به پروژه اضافه نکرده اید application کلاسی با اسم از روی اختیار به عنوان مثالً MyDatabaseApplication بسازید که از Application ارث بری نماید به طور پایین:
// Mohamadreza Amani
// Email: help4usr@gmail.com
public class MyDatabaseApplication extends Application {
MyDatabase myDatabase;
@Override
public void onCreate() {
super.onCreate();
// fallbackToDestructiveMigration() متد
// استفاده شده تا اگر نسخه را تغییر دادید تمام داده های دیتابیس پاک شود
// در برنامه کاربردی بجای پاک کردن داده ها باید داده ها را متناسب با تغییرات به روز کنید
myDatabase = Room.databaseBuilder(this, MyDatabase.class, MyDatabase.NAME).fallbackToDestructiveMigration().build();
}
public MyDatabase getMyDatabase() {
return myDatabase;
}
}
برای به کار گیری از کلاس Application می بایست اسم آن را در Manifest معلوم نمایید. اسم این کلاس را در کد بالا MyDatabaseApplication گزینش کرده بودیم، هم اکنون اسم آن را در پوشه AndroidManifest.xml در خصوصیت android:name وارد میکنیم:
android:name=\".MyDatabaseApplication\"
...>
عملیات های نخستین CRUD
CRUD مخفف کلمه و واژه های Create در معنای «ساختن»، Read در معنای «قرائت»، Update در معنای «آپ دیت رسانی» و Delete در معنای «حذف کردن» میباشد و اشاره به دستوراتی در SQL داراهستند که برای تغییرو تحول اطلاعات استعمال می گردند.
در کد تحت عملیات Create (ساختن) را میبینید. یک شی از کالا User و یک شی از فرآورده Organization میسازیم و آنهارا از روش یک تراکنش (Transaction) در دیتابیس ذخیره میکنیم:
// Mohamadreza Amani
// Email: help4usr@gmail.com
final Organization organization = new Organization();
organization.setName(\"Android\");
final User user = new User();
user.setName(\"Mohamadreza Amani\");
// Get the DAO
final UserDao userDao = ((MyDatabaseApplication) getApplicationContext()).getMyDatabase().userDao();
// Define the task
((MyDatabaseApplication) getApplicationContext()).getMyDatabase().runInTransaction(new Runnable() {
@Override
public void run() {
userDao.insertOrganization(organization);
userDao.insertUser(user);
}
});
کوئری دیتابیس
کلیه کوئری ها می بایست در کلاس های مرتبط با دسترسی به اطلاعات (DAO) نوشته شوند.
درصورتیکه بخواهیم به شکلی درباره استفاده کننده (User) جست و جو کنیم که اسم سازمان (Organization) اورا نیز بدست آوریم. میتوانیم به طور تحت کوئری را بنویسیم:
// declare inner join here
@Query(\"SELECT User.*, Organization.name AS organization_name FROM User INNER JOIN Organization \" +
\"ON User.organization_id = Organization.id WHERE User.id = :id\")
public UserWithOrganization getWithOrgById(int id);
در کوئری بالا بجای استعمال از (organization.name) از organization_name به کارگیری کردیم و برای اینکار از کلام AS به کار گیری کردیم. با اینکار می اقتدار نقص همنام بودن ردیف ها در جدول های متفاوت را حل کرد از جملهً هر دو جدول Organization و User ستونی به اسم name دارا هستند. برای استعمال از مقدار بازگشتی این روال که دربرگیرنده User و organization_name میباشد بایستی کلاس جدیدی بسازیم. اسم این کلاس را در کد بالا UserWithOrganization گذاشتیم که کد آن به طور تحت میباشد.
عملیات Pushing کدها به یک دستگاه دیگر یا این که به یک مخزن مرکزی که تمام پروژه شما به آن متعلق میباشد ممکن میباشد پاره ای مشقت بار به حیث رسد. سناریوی رایج تری که درین خصوص گزینه به کار گیری قرار میگیرد طراحی اپلیکیشن در مشهد که برای ماهیت مشارکتی سیستم گیت یک عنصر کلیدی میباشد به کار گیری از درخواست pull در سیستم گیت میباشد. فرض فرمایید که شما یک خصوصیت نو را در پروژه خویش آخری نموده اید رایاپارس و میخواهید آن را در مقر کد پروژه خویش ترکیب فرمائید. برای این عمل شما یک درخواست pull را ارسال میکنید که رسما از مدیران پروژه میخواهد تا عملیات pull را روی کد نو شما در مخزن مرکزی جاری ساختن دهند.
درخواست pull خیر صرفا به مدیران پروژه این قابلیت و امکان را میدهد که شرکت کردن application شمارا بپذیرند یا این که رد نمایند بلکه یک انجمن گفتگوی خرد را نیز در مخزن مرکزی ساخت و ساز می نماید که در آن تمامی اعضای پروژه میتوانند راجع به این درخواست حرف نمایند. این یک طرز کلیدی میباشد که در آن توسعه و گسترش دهندگان میتوانند تغییراتی که در مقر کد تولید میگردد را هش نمایند کهاین خصوصیت به خصوص در پروژه های متن گشوده در سیستم گیت که دربرگیرنده شرکت کردن تعداد متعددی از اشخاص میباشد از التفات بالایی بهره مند خواهد بود.
Git fork و خصوصیت های آن
یک شاخه یا این که انشعاب در سیستم گیت در واقع به معنای خروج موقت از مقر کد مهم شما میباشد که در غایت مجدد درون آن مخلوط میگردد. یک fork در سیستم گیت یک خروج همیشگی خیس را به شما ارائه میدهد. این خصوصیت مخصوصا برای پروژه های متن گشوده وقتی واقعه می افتد که یک توسعه و گسترش دهنده تصمیم میگیرد که میخواهد یک مقر کد متن گشوده جانور را بگیرد و آن را برای هدف ها خویش پیشرفت دهد کهاین هدف ها ممکن میباشد با هدف ها حفظ کننده فعلی پروژه مختلف باشد. گیت هاب عملیات fork کردن پروژه های جان دار در گیت را برای شما بسیار معمولی خیس می نماید. شما با یک کلیک میتوانید مخزن مو جود را مشابه سازی کرده و با موقعیت خاص خویش سرگرم عمل کردن روی آن گردید.