2010-11-25 8 views
14

私は、あなたがそれらをタップすると音を再生する写真のスライドショーを開発しました。それは年齢2〜4歳の絵本のようなものです。アンドロイド児童アプリのホームボタンを無効にしますか?

アンドロイドはホームボタンを押して本質的にそれを無効にすることはできないので、親が無人の(勇敢な親)と遊ぶために子供に電話を渡すと、子供は不注意にアプリを終了し、電話をかけたり、電話を微調整したりしてください。

現在、この問題の擬似修正プログラムが2つあります。アプリはToddler LockとToddlePhoneです。私はいくつかのガイダンスのためにこれらのアプリの開発者に連絡しようとしましたが、何も開示するつもりはありません。

他のアプリがホーム画面の置き換えアプリのように動作しているようです。あなたがそれらのアプリで "childproofモード"を有効にすると、ユーザーはアクションを選択してアプリを選択するよう促され、選択肢は "Launcher、LauncherPro"プラス幼児アプリ。幼児用アプリをデフォルトにして、ボイラーにする必要があります。電話機は「ロック」され、電話機のロックを解除すると、キーの組み合わせや画面の四隅などに触れるだけで「ロック解除」できます。あなたの通常のホームスクリーンアプリのデフォルトが復元されます。あなたは、次回 "子供の保護モード"を有効にするときに、幼児アプリをデフォルトにする必要はありません。

私はこれらの2つのアプリにはSamsungの携帯電話に問題があり、修正するために工場出荷時のリセットが必要な無限のクラッシュアンドリスタートループが発生する可能性があることを読んだことがあります。明らかに、これは問題の理想的な解決策ではありませんが、現時点では唯一のもののように見えます。

"childproofモード"の実装方法に関するアイデアはありますか?

答えて

5

あなたはホーム画面の交換について正しいと思います。私が知っている幼児用ロックホームボタンを保持している玩具ロック中に、(少なくとも私のLG GW620で)ALT-TABタイプのメニューが表示されるので、ホームボタンをオーバーライドしません。

アンドロイドのdevのサイトで、ソースコードで、ホーム画面の交換アプリ利用可能があります:

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

EDIT:また、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秒かかります。これは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

これを実行する方がはるかに良い方法!ブラボ! – 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> 
関連する問題