14

写真をタップすると音が鳴るスライドショーのアプリを開発しました。2〜4歳の絵本のようなものです。

問題は、Androidではホームボタンの押下をキャプチャして基本的に無効にすることができないため、親が子供に電話を渡して無人(勇敢な親)で遊ぶと、子供が誤ってアプリを終了してから電話をかけたり、それ以外の場合は、電話を微調整します。

現在、この問題の疑似修正が行われているアプリは他に2つあります。アプリはToddlerLockとToddlePhoneです。私はこれらのアプリの開発者にいくつかのガイダンスを求めて連絡しようとしましたが、彼らは何も開示する気がありませんでした。

他のアプリはどちらもホーム画面の置き換えアプリのように機能しているようです。これらのアプリで「チャイルドプルーフモード」を有効にすると、ユーザーはアクションのアプリを選択するように求められ、選択肢は「Launcher、LauncherProなど」になります。プラス幼児アプリ。次に、幼児用アプリをデフォルトにして出来上がりにする必要があります。電話は「ロック」されており、電話を「ロック解除」するときは、キーの組み合わせを使用するか、画面の四隅に触れるなどしてのみ「ロック解除」できます。通常のホーム画面アプリがデフォルトで復元されました。次回「チャイルドプルーフモード」を有効にするときに、幼児用アプリをデフォルトにする必要はありません。

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

「チャイルドプルーフモード」の実装方法について何かアイデアはありますか?

4

5 に答える 5

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" />
于 2013-05-26T09:59:53.917 に答える
5

ホーム画面の交換については正しいと思います。私が知っているToddlerLockは、ホームボタンを上書きしません。ToddleLockでホームボタンを押したままにすると、ALT-TABタイプのメニューが表示され、電話がクラッシュする傾向があるためです。

android devサイトには、ソースコード付きのホーム画面置換アプリがあります。

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

編集:また、ADW.Launcher:

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

于 2010-11-25T15:27:49.073 に答える
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;
        }
       }

編集: これはすべての古いバージョンのAndroidで機能します。しかし、ICSとジェリービーンズでは機能せず、アプリでクラッシュします

于 2012-05-07T07:10:14.143 に答える
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);
于 2012-05-07T09:42:30.093 に答える
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>
于 2015-07-01T17:41:24.747 に答える