PDA

View Full Version : نرم افزار قفل



Amin-rz
سه شنبه 13 آبان 1393, 18:14 عصر
سلام.
چطور ميشه اكتيويتي اصلا كنار نره تا مثلا كد مشخصي داده بشه؟
يعني هيچكدوم از دكمه ها(home,back و ...) كار نكنن.

aminika
سه شنبه 13 آبان 1393, 19:24 عصر
همچین چیزی که اگه اشتباه نکنم باید خیلی مشکل باشه و حداقل نیازمند دسترسی های سطح بالا خوهد بود. که شما بتونی دکمه هوم رو از کار بندازی.(تا اونجا که من میدونم)
اما دکمه back رو میشه به راحتی تو قسمت onbackpersed() غیرفعال کرد. در ضمن شما بیشتر توضیح بده احتمالا شما اصلا نیازی به همچین کاری نداشته باشی. این همه برنامه قفل موجوده که هیچکدومشون دکمه هوم رو از کار ننداختن.

Amin-rz
سه شنبه 13 آبان 1393, 20:50 عصر
قفل نرم افزار نمي خوام.
كاربر هيچ كاري نتونه بكنه.مگه قفل باز بشه.

pbm_soy
چهارشنبه 14 آبان 1393, 01:52 صبح
همونطور که دوستمون فرمودند شما میتوانید با override کردن متدهای (رخدادهای) صفحه کلید این کار را انجام دهید یعنی در اکتیویتی تابع رخداد موردنظر را بنویسید و در آن هیچکاری انجام ندهید و حتی جلوی فراخوانی متد سیستم را هم بگیری super.onBackPressed(); را در برای کلید برگشت ننویسید البته اگر خطا نگیرد که فکر نکنم خطا بگیرد

به همین ترتیب رخدادهای دیگر صفحه گلید را هم باید مدیریت کنید مانند onkeypress , onlongkeypress , و غیره

Amin-rz
چهارشنبه 14 آبان 1393, 07:58 صبح
رويداد كليد home و power رو نميدونم.

rezaricky
چهارشنبه 14 آبان 1393, 10:22 صبح
نحوه Override دکمه home

@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_HOME)) {
Toast.makeText(this, "You pressed the home button!", Toast.LENGTH_LONG).show();
return true;
}
return super.onKeyDown(keyCode, event);

}


نحوه Override دکمه Power


@Overridepublic boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
Log.i("", "Dispath event power");
Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
sendBroadcast(closeDialog);
return true;
}


return super.dispatchKeyEvent(event);
}




برای جلوگیری از اجرای کار این دکمه ها باید فراخوانی super رو حذف کنید.

rezaricky
چهارشنبه 14 آبان 1393, 10:51 صبح
یک نکته رو فراموش کردم اونم اینکه برای اینکه بتونید رویداد دکمه Home رو override کنید باید رویداد onAttachedToWindow رو هم override کنید :

@Override
public void onAttachedToWindow()
{
Log.i("TESTE", "onAttachedToWindow");
this.getWindow().setType(WindowManager.LayoutParam s.TYPE_KEYGUARD);
super.onAttachedToWindow();
}

Amin-rz
چهارشنبه 14 آبان 1393, 12:25 عصر
یک نکته رو فراموش کردم اونم اینکه برای اینکه بتونید رویداد دکمه Home رو override کنید باید رویداد onAttachedToWindow رو هم override کنید :

@Override
public void onAttachedToWindow()
{
Log.i("TESTE", "onAttachedToWindow");
this.getWindow().setType(WindowManager.LayoutParam s.TYPE_KEYGUARD);
super.onAttachedToWindow();
}

این چکار می کنه؟

rezaricky
چهارشنبه 14 آبان 1393, 13:00 عصر
این تکه کد عملکرد دکمه home رو غیر فعال میکنه.
البته یه مشکلی که هست اینه که توی نسخه های جدید جلوی این کار رو گرفتن و اجرای این کد باعث کرش شدن برنامه میشه.
این لینکها رو ببین : http://stackoverflow.com/questions/5547818/can-i-override-the-home-button-in-my-application
http://stackoverflow.com/questions/2162182/android-is-it-possible-to-disable-the-click-of-home-button?lq=1