2010-11-25 3 views
14

나는 그것을 개발할 때 각각 소리를내는 그림 슬라이드 쇼를 개발했다. 그것은 2-4 세의 그림책과 같습니다.android 유아용 앱의 홈 버튼을 사용 중지 하시겠습니까?

안드로이드는 홈 버튼 누름을 포착하지 못하게하고 본질적으로 사용 중지하지 않기 때문에 부모가 자녀에게 전화를 걸어 무인 (용감한 학부모)과 게임을 할 때 자식이 우연히 앱을 종료 할 수 있으며 그런 다음 전화를 걸거나 전화를 조정하십시오.

현재이 문제에 대한 Psuedo 픽스가있는 두 개의 다른 앱이 있습니다. 응용 프로그램은 유아 잠금 및 ToddlePhone 있습니다. 나는이 앱의 개발자에게 몇 가지 안내를 위해 연락을 시도했지만 아무 것도 공개하지 않았으며 괜찮 으면 여기에있는 사람에게도 제안이 있습니까?

다른 앱이 모두 홈 화면 대체 앱처럼 작동하는 것처럼 보입니다. 해당 응용 프로그램에서 "childproof 모드"를 활성화하면 사용자는 동작을 선택하고 응용 프로그램을 선택하라는 메시지를 표시하고 "Launcher, LauncherPro, etc." 더하기 유아 앱. 그런 다음 휴대 전화를 "잠금 해제"할 때 유아용 앱을 기본값으로 설정해야하며 휴대 전화는 "잠겨"있으며 키 조합을 사용하거나 화면 네 모퉁이를 만질 때만 "잠금 해제"할 수 있습니다. 일반 홈 화면 앱의 기본값이 복원되었습니다. 다음에 "childproof 모드"를 사용할 때 유아용 앱을 기본으로 설정하지 않아도됩니다.

나는이 두 앱이 삼성 휴대 전화에 문제가 있다는 것을 읽었으며, 문제를 해결하기 위해 공장 초기화가 필요한 무한 크래시 및 재시작 루프가 발생할 수 있음을 읽었습니다. 분명히이 문제에 대한 이상적인 해결책은 아니지만이 시점에서 유일하게 사용할 수있는 것으로 보입니다.

"아동 보호 모드"를 구현하는 방법에 대한 아이디어가있는 사람이 있습니까?

답변

5

나는 홈 화면 교체에 관해 당신이 맞다고 생각한다. Toddler Lock 홈 버튼을 잡고있는 Toddle Lock에서 ALT-TAB 유형 메뉴를 가져 오는 동안 (적어도 내 LG GW620에서) 홈 버튼을 덮어 쓰지 않습니다. 그러면 휴대 전화가 충돌하는 경향이 있습니다.

안드로이드 dev에 사이트에, 소스 코드, 홈 화면 교체 애플 리케이션을 사용할 수 있습니다 :

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

편집 : 또한, ADW.LAUNCHER :

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

+1

그래서 비슷한 것을하고 싶습니다. 나는 adw를 설치했다. 버튼을 어떻게 비활성화 할 수 있습니까? –

+0

아래의 yoah의 답변을 확인하십시오. 이 질문을위한 최선의 해결책입니다. – venkat

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에서 작동합니다. 안드로이드의 r 버전. 그러나 ICS와 젤리 빈에서 작동하지 않습니다와 나는 다음과 같은 코드를 사용하여 기본 홈 런처 교체

+0

4.0x에서 작동하지 않습니다 –

+0

@sixeightzero하지만, 안타깝게도 안드로이드 버전을 지정하지 않았습니다!! 일부 해설을 위해 답변을 편집했습니다 –

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 초가 걸리는 문제가있었습니다. 나는 이것이 안드로이드의 보안 기능이라고 생각하지만 확실치 않습니다. 이를 우회하기 위해 서비스에서 다른 앱을 볼 수있게되면 앱이 다시 실행될 때까지 몇 초 동안 홈 화면을 덮는 상위보기 (알림 창)를 추가합니다. 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

이것을 실행하는 데 훨씬 좋은 방법입니다! 브라보! – AutoM8R

+0

몇 초 동안 홈 화면을 덮는 탑 뷰를 추가 할 수있게 도와주세요. 미리 감사드립니다. –

+0

@ AmolSawant96Kuli : 톱뷰를 만들 수 있습니까? – venkat

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> 
관련 문제