مقالات اپلیکیشن

شرح مقالات اپلیکیشن

مقالات اپلیکیشن

شرح مقالات اپلیکیشن

عملکردهای SIP

SIP دارنده سعی های اساسی ذیل میباشد.

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

(User Agent Client (UAC
(User Agent Server (UAS
 

UAC :
UAC یا این که User Agent Client آن گروه از استفاده کننده هایی می‌باشند application که درخواست هایی ساخت می نمایند و این درخواست ها را به سرور می فرستند. این درخواست ها بوسیله اپ های استفاده کننده (client application)  که روی سیستم آنها در درحال حاضر اجراست، ساخت‌و‌ساز میشوند.

UAS :
UAS و یا این که User Agent Server سیستم هایی میباشند که درخواست ایجاد گردیده بوسیله ی UAC را می گیزند. UAS این درخواست ها را پردازش کرده و بعد از آن طبق آنان جواب هایی ایجاد می نماید.

SIPManager :
SIPManager یک API اندروید برای عمل های SIP میباشد ، عمل هایی مانند برقراری اتصالات SIP، و دسترسی به خدمت های SIP مربوطه را مهیا می نماید. این مجموعه نقطه ی استارت برای هر شغل SIP میباشد. شما می‌توانید یک مثال از آن را با روال newInstance() به دست آورید.

SipManager توابع متعددی برای سازماندهی کار های SIP داراست. بعضا از این توابع در جدول ذیل ارائه گردیده اند :

(close(String localProfileUri : پروفایل مشخص و معلوم گردیده ای را می بندد تا تماسی برقرار نسازد و اخذ نیز نکند.

(getCallId(Intent incomingCallIntent : ID تماس را از تماس ورودی مشخصی می‌گیرد.

isOpened(String localProfileUri) : در شرایطی که پروفایل معلوم گردیده ای از خدمت SIP برای برقراری و یا این که اخذ تماس گشوده باشد، آن را تحلیل می نماید.

(isSipWifiOnly(Context context : درصورتی که SIP صرفا روی وای فای  در دسترس باشد، true را Return می نماید.

(isRegistered(String localProfileUri : در حالتی‌که خدمت SIP به صورت توفیق آمیزی پروفایل را روی ارائه کننده ی SIP (معین گردیده در پروفایل) برای تماس های دریافتی تصویب نموده باشد، آن را محاسبه می نماید.

(isVoipSupported(Context context : در شرایطی‌که سیستم ، SIP را براساس VOIP API نگهبانی نماید، true را Return می نماید.

(takeAudioCall(Intent incomingCallIntent, SipAudioCall.Listener listener : یک تماس صوتی SIP ، برای تصاحب کردن یک تماس ورودی، ساخت‌و‌ساز می نماید.

سنسورها و حسگرها در اندروید

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


حسگرهای حرکتی

حسگرهای محیطی

حسگرهای موقعیتی


برخی از حسگرها مبنی بر 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

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

تست رابط کاربری اندروید

Android SDK ابزارهای پایین را برای نگهبانی طراحی اپلیکیشن در مشهد  از آزمایش رابط کاربری  در نرم‌افزار شما مهیا می نماید:
uiautomatorviewer
uiautomator
uiautomatorviewer
ابزاری معمولی که دارنده رابط کاربری گرافیکی برای کپی و تجزیه و آنالیز اجزای UI یک اپ اندرویدی میباشد.
ابزار uiautomatorviewer یک رابط بصری مطلوب برای نظارت سلسله مراتب لایوت و مشاهده مختصات هرکدام از اجزای UI  که در دستگاه آیتم تست اکران داده میشوند ، مهیا می نماید. با به کارگیری از این داده ها ، بعداً می‌توانید آزمایشات uiautomator را ساخت و ساز نمائید که اجزای خاص UI را برای تست غرض قرار میدهند.
برای تجزیه و آنالیز اجزای UI در طرحی که می‌خواهید تست فرمایید ، پروسه ذیل را می بایست بعداز نصب نرم‌افزار اجرا دهید.
مطمئن گردید که دستگاه اندرویدی آیتم تست به رایانه متصل باشد
یک پنجره ترمینال گشوده نمائید و به /android-sdk>/tools> بروید
ابزار را با فرمان ذیل ایفا نمائید:
uiautomatorviewer
اوامر مبتنی بر صورت پایین دنبال می گردند:
مشاهده خواهید کرد که پنجره تحت ظواهر می‌گردد. این پنجره ی پیش فرض UI Automator Viewer میباشد:
روی نشان دستگاه ها در کناره بالا سمت راست کلیک نمائید. اپلیکیشن UI Automator Viewer آغاز به دریافت کردن عکس فوری UI XML از برگه فعلی گشوده گردیده در دستگاه می نماید. در هنگام مهیا کردن تصویر، دیالوگ ذیل را میبینید:

درخواست pull در سیستم گیت

عملیات Pushing کدها به یک دستگاه دیگر یا این که به یک مخزن مرکزی که تمام پروژه شما به آن متعلق میباشد ممکن میباشد پاره ای مشقت بار به حیث رسد. سناریوی رایج تری که درین خصوص گزینه به کار گیری قرار می‌گیرد  طراحی اپلیکیشن در مشهد که برای ماهیت مشارکتی سیستم گیت یک عنصر کلیدی میباشد به کار گیری از درخواست pull در سیستم گیت میباشد. فرض فرمایید که شما یک خصوصیت نو را در پروژه خویش آخری نموده اید رایاپارس  و می‌خواهید آن را در مقر کد پروژه خویش ترکیب فرمائید. برای این عمل شما یک درخواست pull را ارسال میکنید که رسما از مدیران پروژه می‌خواهد تا عملیات pull را روی کد نو شما در مخزن مرکزی جاری ساختن دهند.

درخواست pull خیر صرفا به مدیران پروژه این قابلیت و امکان را می‌دهد که شرکت کردن application  شمارا بپذیرند یا این که رد نمایند بلکه یک انجمن گفتگوی خرد را نیز در مخزن مرکزی ساخت و ساز می نماید که در آن تمامی اعضای پروژه میتوانند راجع به این درخواست حرف نمایند. این یک طرز کلیدی میباشد که در آن توسعه و گسترش دهندگان می‌توانند تغییراتی که در مقر کد تولید میگردد را هش نمایند که‌این خصوصیت به خصوص در پروژه های متن گشوده در سیستم گیت که دربرگیرنده شرکت کردن تعداد متعددی از اشخاص میباشد از التفات بالایی بهره مند خواهد بود.

Git fork و خصوصیت های آن

یک شاخه یا این که انشعاب در سیستم گیت در واقع به معنای خروج موقت از مقر کد مهم شما میباشد که در غایت مجدد درون آن مخلوط می‌گردد. یک fork در سیستم گیت یک خروج همیشگی خیس را به شما ارائه می‌دهد. این خصوصیت مخصوصا برای پروژه های متن گشوده وقتی واقعه می افتد که یک توسعه و گسترش دهنده تصمیم میگیرد که میخواهد یک مقر کد متن گشوده جانور را بگیرد و آن را برای هدف ها خویش پیشرفت دهد که‌این هدف ها ممکن میباشد با هدف ها حفظ کننده فعلی پروژه مختلف باشد. گیت هاب عملیات fork کردن پروژه های جان دار در گیت را برای شما بسیار معمولی خیس می نماید. شما با یک کلیک می‌توانید مخزن مو جود را مشابه سازی کرده و با موقعیت خاص خویش سرگرم عمل کردن روی آن گردید.