روشن نگه داشتن صفحه نمایش
در این جلسه از سری مباحث آموزش برنامه نویسی اندروید قصد دارم نحوه روشن نگه داشتن صفحه نمایش دستگاه اندرویدی، هنگامی که برنامه ما در حال اجراست را بررسی کنم. این کار به دو روش تعریف در اکتیویتی و همچنین لایه XML قابل انجام است.
روشن نگه داشتن صفحه نمایش دستگاه اندرویدی
به نام خدا. گاهی اوقات لازم است در یک یا چند اکتیویتی، صفحه نمایش را تا زمانی که اکتیویتی در حال اجراست روشن نگه داریم. برای مثال هنگامی که کاربر درون خودرو از برنامه مسیریابی استفاده میکند، لازم است صفحه نمایش بدون لمس صفحه برای چند دقیقه روشن بماند. در اینجا به دو شیوه میتوانیم در صفحات مشخصی از برنامه، صفحه نمایش را روشن نگه داشته و از خاموش شدن آن جلوگیری کنیم.
ساخت پروژه
قبل از هرچیز ابتدا طبق مبحث آموزش ساخت پروژه در اندروید استودیو یک پروژه اندرویدی با نام KeepScreenOn میسازم. اکتیویتی را از نوع Empty Activity و زبان را Java انتخاب کردم.
ابتدا روش لایه XML و سپس روش تعریف در اکتیویتی را بررسی میکنیم.
روشن نگه داشتن صفحه توسط ویژگی keepScreenOn در XML
ساده ترین روش، استفاده از ویژگی keepScreenOn در لایه XML اکتیویتی است. این ویژگی در view والد تعریف میشود و تا زمانی که اکتیویتی در حال اجرا باشد، صفحه نمایش در حالت روشن باقی میماند:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" android:keepScreenOn="true"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!"/> </LinearLayout>
در کد فوق، ویژگی android:keepScreenOn با مقدار true در layout تعریف شده است. با اجرای پروژه تا زمانی که اکتیویتی در حال اجراست، صفحه نمایش خاموش نخواهد شد.
روشن نگه داشتن صفحه توسط FLAG_KEEP_SCREEN_ON در اکتیویتی
روش قبل در عین سادگی یک ایراد هم دارد. اینکه به محض اجرای اکتیویتی و تا زمانی که این اکتیویتی در حال اجرا باشد، صفحه نمایش در حالت روشن باقی میماند و امکان مدیریت آن وجود ندارد. در بعضی موارد ممکن است روشن ماندن صفحه را صرفا در شرایط خاص و یا بعد از انجام یک عمل، نیاز داشته باشیم. برای مثال در برنامه مسیریابی، تا زمانی که کاربر روی نقشه مبدا و مقصد را تعیین نکرده و مسیر مشخص نشده، نیاز به روشن ماندن صفحه نداریم. بنابراین اینجا روش XML مناسب ما نبوده و صرف باز شدن اکتیویتی مربوط به نقشه، دلیلی برای فعال نگه داشتن صفحه نمایش نیست. این قسمت را با یک مثال ساده در قالب یک دکمه سوئیچ (Switch Button) نشان میدهم:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" tools:context=".MainActivity"> <Switch android:id="@+id/switch_btn" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
MainActivity.java
package ir.android_studio.keepscreenon; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.WindowManager; import android.widget.CompoundButton; import android.widget.Switch; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private Switch screenSwitch; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); screenSwitch = findViewById(R.id.switch_btn); screenSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); Toast.makeText(MainActivity.this, " حالت روشن فعال شد", Toast.LENGTH_SHORT).show(); } else { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); Toast.makeText(MainActivity.this, " حالت روشن غیر فعال شد", Toast.LENGTH_SHORT).show(); } } }); } }
ابتدا ویژگی keepScreenOn را از لایه XML حذف و یک Switch Button به آن اضافه کردم. سپس در اکتیویتی درون متد onCheckedChanged دکمه سوئیچ، شرطی تعریف کردم که در صورت روشن شدن دکمه کد زیر اجرا شود:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
کلاس WindowManager.LayoutParams مدیریت صفحات در اندروید را بر عهده دارد. FLAG_KEEP_SCREEN_ON همانطور که از نام آن پیداست یک نشانه یا پرچم (Flag) برای روشن ماندن صفحه است. حالا وقتی این نشانه درون getWindow().addFlags() قرار گیرد حالت روشن ماندن صفحه برای این اکتیویتی فعال میشود.
برای غیر فعال کردن این حالت کافیست بجای addFlags() متد clearFlags() فراخوانی شود:
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
مجدد پروژه را اجرا و هردو حالت فعال و غیر فعال بودن دکمه سوئیچ را تست کنید.
مطالعهی بیشتر:
https://developer.android.com/training/scheduling/wakelock
https://developer.android.com/reference/android/view/WindowManager.LayoutParams
توجه : سورس پروژه درون پوشه Exercises قرار دارد
تعداد صفحات : ۶
حجم : ۱ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۱ مگابایت لینک کمکی
واقعا برنامهء عالیایه.