بدست آوردن اطلاعات دستگاه اندرویدی
در این جلسه از سری مباحث آموزش برنامه نویسی اندروید به نحوه بدست آوردن اطلاعات دستگاه اندرویدی شامل مشخصات سخت افزاری و نرم افزاری به وسیله کلاس Build میپردازیم.
بدست آوردن اطلاعات دستگاههای اندرویدی
به نام خدا. با توجه به متن باز بودن سیستم عامل اندروید، تولید کنندگان مطرح و گمنام بی شماری انواع دستگاههای اندرویدی را تولید و روانه بازار میکنند. هر مدل از این دیوایسها دارای سخت افزاری متفاوت از سایر مدلهاست. همچنین با توجه به انتشار نسخههای جدید اندروید توسط گوگل، نسخههای مختلفی از این سیستم عامل توسط کاربران در حال استفاده است.
گاهی اوقات ممکن است بخشی از عملکرد برنامه ما وابسته به نسخه خاصی از اندروید و یا سخت افزار مانند CPU باشد. یا اینکه بخواهیم بخشی از برنامه بر اساس تفاوت سخت افزار و نرم افزار هر دستگاه، به شیوه متفاوتی اجرا شود. در هر صورت لازم است تا توسعه دهنده اندروید به ویژگیهای نرم افزاری و سخت افزاری دستگاه دسترسی داشته باشد.
در اندروید کلاسی با نام Build این وظیفه را بعهده دارد. در آموزشهای گذشته مانند آموزش کار با نوتیفیکیشن در اندروید و آموزش Service در اندروید نیز از این کلاس برای تشخیص نسخه اندروید و انجام عمل متناسب با آن استفاده کرده بودیم. در این جلسه قصد دارم سایر قابلیتهای این کلاس را بررسی کنم.
ویژگیهای کلاس Build
در جدول زیر به تعدادی از ویژگیهای کلاس Build پرداخته و کاربرد هرکدام را به مختصر توضیح میدهم:
نام ویژگی | شرح |
---|---|
BRAND | برند سازنده دستگاه |
MANUFACTURER | نام سازنده دستگاه |
DEVICE | نام طرح صنعتی دستگاه |
MODEL | نام رسمی دستگاه |
DISPLAY | شناسه صفحه نمایش دستگاه |
TYPE | نوع دستگاه از جمله “user” و “eng” |
HARDWARE | مشخصات سخت افزار دستگاه |
PRODUCT | نام کلی دستگاه |
VERSION.RELEASE | نسخه اندروید |
VERSION.SDK_INT | نسخه SDK اندروید |
پروژه بدست آوردن اطلاعات دستگاه اندرویدی
قصد دارم تعدادی از مهمترین ویژگیهای کلاس Build اندروید را در قالب یک پروژه ساده استفاده کنم بطوری که خروجی روی اکتیویتی نمایش داده شود. مطابق مبحث آموزش ساخت پروژه در اندروید استودیو یک پروژه اندرویدی با نام DeviceInfo میسازم. اکتیویتی را از نوع Empty Activity و زبان را Java انتخاب کردم.
ابتدا ۵ عدد TextView به layout اکتیویتی اضافه میکنم. هرکدام از این View ها یکی از مشخصات دستگاه را نمایش خواهد داد.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/txt_manufacturer" android:textSize="20dp" android:text="" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/txt_model" android:textSize="20dp" android:text="" android:layout_below="@id/txt_manufacturer" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/txt_version" android:textSize="20dp" android:text="" android:layout_below="@id/txt_model"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/txt_sdk" android:textSize="20dp" android:text="" android:layout_below="@id/txt_version" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/txt_hardware" android:textSize="20dp" android:text="" android:layout_below="@id/txt_sdk" /> </RelativeLayout>
سپس اکتیویتی را به صورت زیر تکمیل میکنم:
MainActivity.java
package ir.android_studio.deviceinfo; import androidx.appcompat.app.AppCompatActivity; import android.os.Build; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { TextView manufacturerTxt, modelTxt, versionTxt, sdkTxt, hardwareTxt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); manufacturerTxt = findViewById(R.id.txt_manufacturer); modelTxt = findViewById(R.id.txt_model); versionTxt = findViewById(R.id.txt_version); sdkTxt = findViewById(R.id.txt_sdk); hardwareTxt = findViewById(R.id.txt_hardware); String manufacturer = Build.MANUFACTURER; String model = Build.MODEL; String version = Build.VERSION.RELEASE; int sdk = Build.VERSION.SDK_INT; String hardware = Build.HARDWARE; manufacturerTxt.setText("Manufacturer: " + manufacturer); modelTxt.setText("Model: " + model); versionTxt.setText("Version: " + version); sdkTxt.setText("SDK: " + Integer.toString(sdk)); hardwareTxt.setText("Hardware: " + hardware); } }
چهار متغیر از جنس String و یک متغیر از جنس int تعریف کردهام که به ترتیب، مشخصات مربوط به MANUFACTURER و MODEL و RELEASE و SDK_INT و HARDWARE را از کلاس Build گرفته و ذخیره میکنند. در نهایت هرکدام را روی یک TextView نمایش میدهم.
پروژه را اجرا میکنم:
ملاحظه میکنید مشخصات دستگاه شامل نام سازنده، مدل دستگاه، نسخه اندروید، نسخه SDK و مدل CPU در اکتیویتی نمایش داده شده است.
از جمله کاراییهای این کلاس میتوان به اجرا یا عدم اجرای کد ساخت کانال نوتیفیکیشن بر اساس نسخه سیستم عامل اشاره کرد که در مبحث آموزش کار با نوتیفیکیشن در اندروید به آن پرداخته شده است:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create Notification channel }
شرط فوق بررسی میکند در صورتی کد اجرا شود که نسخه اندروید دستگاه حداقل Oreo و یا بالاتر باشد.
موفق و پیروز باشید.
مطالعهی بیشتر:
https://developer.android.com/reference/android/os/Build
https://developer.android.com/reference/android/os/Build.VERSION
توجه : سورس پروژه درون پوشه Exercises قرار دارد
تعداد صفحات : ۶
حجم : ۱ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۱ مگابایت لینک کمکی
همین کد رو بصورت که شما نوشتید وارد کردم
۶ تا ارور
package R does not exist
میده
بنظرم دقیق تر توضیح بدید بهتر است برای جذب مشتری الان تمایلی استفاده از سایت شما رو ندارم
سلام. اروری که شما گرفتید مربوط به سینک نشدن پروژتون هست و ارتباطی به مبحث این آموزش نداره کلا!
قسمت build پایین صفحه رو ببینید چرا بیلد نشده اگه چیزی نبود یه بار گزینه Sync رو بزنید تا پروژه سینک بشه.
قبل اینکه سراغ مباحث تکمیلی برید با کلیت کار آشنا بشید تا برای یه ارور عمومی اینطوری دنبال جواب نباشید
سلام خسته نباشید. چطور میشه فهمید برنامه ای که کتاب خانه .so دارد برای چه نوع پردازنده ای ساخته شده؟
سوالم برای زمانی هست که از هر پردازنده یک خروجی apk میگیریم
اطلاع کاملی در موردش ندارم. so مربوط به کتابخانه ای هست که به زبان native نوشته شده. مستندات مربوط به NDK رو بررسی بفرمایید در developer.android.com
بسیار عالی بود. ساید شما داره سرآمد سایتها و مرجع میشه. واقعا به تک تک موارد دارید اشاره میکنید. دستتون درد نکنه