اکثر دستگاه های اندرویدی دارنده حسگرهای داخلی میباشند که تکان ، جهت گیری و حالت گوناگون محیطی را اندازه گیری می نمایند. سیستم ادله اندروید از سه تیم کبیر حسگر دفاع می نماید.
حسگرهای حرکتی
حسگرهای محیطی
حسگرهای موقعیتی
برخی از حسگرها مبنی بر 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 گذاشتیم که کد آن به طور تحت میباشد.