2010-11-25 40 views
14

我開發的應用程序是一個幻燈片放映的圖片,當您點擊它們時,每個圖片都會播放聲音。它就像一本2-4歲的圖畫書。禁用android幼兒應用程序的主頁按鈕?

問題是,因爲android不會讓你捕獲一個home按鈕,並且基本上禁用它,所以當父母把手機給他們的孩子玩無人看管(勇敢的父母)時,孩子可能會無意中退出應用程序,然後撥打電話或以其他方式調整電話。

還有兩個其他應用程序目前已針對此問題進行了psuedo修復。這些應用程序是幼兒鎖和ToddlePhone。我已經嘗試聯繫這些應用程序的開發人員獲取一些指導,但他們不願意透露任何內容,如果沒有問題,但是這裏有人有什麼建議嗎?

它看起來像這些其他應用程序都像一個主屏替換應用程序。當您在這些應用上啓用「childproof模式」時,將提示用戶選擇並應用該操作,並且選項爲「Launcher,LauncherPro等」。加上幼兒應用程序。然後,您必須將幼兒應用程序設置爲默認設置,並且瞧,當您「解鎖」手機時,手機將被「鎖定」,並且只能使用組合鍵或觸摸屏幕四角等方式「解鎖」。您的正常主屏幕應用默認恢復。下次啓用「兒童安全模式」時,您甚至不必將幼兒應用程序設爲默認應用程序。

我讀過這兩款應用程序在三星手機上存在問題,它們可能會導致需要重置出廠設置的無限重啓和重啓循環。顯然,這不是解決問題的理想方案,但看起來這是目前唯一可用的解決方案。

有沒有人有關於如何實施「防止兒童模式」的任何想法?

回答

5

我認爲你是對的主屏替換。幼兒鎖我知道不會覆蓋主頁按鈕,因爲(至少在我的LG GW620),而在持有主頁按鈕的Toddle Lock中會出現ALT-TAB類型的菜單 - 這往往會導致手機崩潰。

有一個主屏幕更換應用程序可用的源代碼,在Android開發人員網站:

http://developer.android.com/resources/samples/Home/index.html

編輯:另外,ADW.Launcher:

http://code.google.com/p/adw-launcher-android/

+1

所以我想做類似的事情。我已經安裝了adw。我如何禁用按鈕? – 2011-09-10 19:49:36

+0

查看下面的yoah的答案。這是這個問題的最佳解決方案。 – venkat 2014-07-03 07:23:55

1
Add in to your Main Activity 
@Override 
    public void onAttachedToWindow() 
    { 
     this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
     super.onAttachedToWindow(); 
    } 

And Override Key down event 

@Override 
    public boolean onKeyDown(int iKeyCode, KeyEvent event) 
    { 

     if(iKeyCode == KeyEvent.KEYCODE_BACK || iKeyCode == KeyEvent.KEYCODE_HOME) 
     { 
      return true; 
     } 
     } 

編輯: 這適用於所有olde Android版本。但不會在ICS和果凍豆的工作,並給你崩潰的應用程序

+0

將無法​​在4.0.x上工作 – 2012-09-23 03:06:06

0

我用下面的代碼替換默認主頁發射器:

Intent selector = new Intent("android.intent.action.MAIN"); 
selector.addCategory("android.intent.category.HOME"); 
selector.setComponent(new ComponentName("android","com.android.internal.app.ResolverActivity")); 
startActivity(selector); 
17

我需要有一個新的應用蹣跚學步的鎖,並不想使用啓動器。 這裏是我做的,你可以看到在https://play.google.com/store/apps/details?id=com.justforkids.animalsounds

  1. 應用程序時,鎖被激活,啓動一個服務,並停止它當鎖被停用
  2. 服務檢查頂部運行的應用程序,並且如果它不是我的活動,服務啓動我的活動
  3. 仍然存在一個問題,即當用戶單擊「家庭」時,我的活動再次啓動大約需要6秒。我認爲這是Android的安全功能,但不能確定。要繞過這一點,當服務檢測到另一個應用程序可見時,它會添加一個覆蓋主屏幕的頂視圖(作爲警報窗口),以便重新啓動應用程序。

對於第3步,這裏有更多的細節:

創建覆蓋佈局,例如文件locked_overlay.xml:

<FrameLayout 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:background="#d0000000" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:gravity="center_horizontal" 
     android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="12dp" 
     android:text="@string/app_name" 
     android:textColor="#fff" 
     android:textSize="18sp" 
     android:textStyle="bold" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Locked mode is on" 
     android:textColor="#fff" 
     android:textSize="18sp" /> 

    </LinearLayout> 

</FrameLayout> 

在服務顯示或隱藏疊加使用:

private View lockedOverlay = null; 

    private void hideLockedOverlay() { 
    if (lockedOverlay != null) { 
     WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
     windowManager.removeView(lockedOverlay); 
     lockedOverlay = null; 
    } 
    } 

    private void showLockedOverlay() { 
    if (lockedOverlay != null) { 
     return; 
    } 

    WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
    WindowManager.LayoutParams viewLayoutParams = new WindowManager.LayoutParams(
    LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 
    WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 
     | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
     PixelFormat.TRANSLUCENT); 
    viewLayoutParams.gravity = Gravity.TOP | Gravity.LEFT; 

    LayoutInflater inflater = LayoutInflater.from(this); 
    lockedOverlay = inflater.inflate(R.layout.locked_overlay, null); 
    windowManager.addView(lockedOverlay, viewLayoutParams); 
    } 

您需要的權限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 
0

對於4.0及更高版本,您可以避開Android安全限制並將您的應用設置爲啓動器。添加到你的清單文件:

<uses-permission android:name="android.permission.GET_TASKS" /> 

<activity 
    android:launchMode="singleInstance" 
    android:name=".MainActivity" 
    android:label="@string/app_name" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.HOME" /> 
    </intent-filter> 
</activity> 
相關問題