119

私は、CF.NETエンタープライズアプリケーションをAndroidデバイスで実行するために移植できるかどうかとその方法を評価しているところです。Windows Mobile電話のアプリケーションは、キオスクモードで実行されます。このモードでは、起動後にアプリケーションがフルスクリーンモードで自動起動し、ユーザーが誤ってまたは意図的に電話の他の部分にアクセスすることはできません。

Androidで、起動後に1つのアプリケーションのみを自動起動して、ユーザーが誤って(または自発的に)Androidデバイスの他の部分にアクセスするのを防ぐことは可能ですか?

4

11 に答える 11

30

android.intent.action.BOOT_COMPLETEDBroadcastReceiverでインテントをリッスンし、そこからアクティビティを開始することで、起動時にアプリケーションを自動起動できます。アクティビティでは、新しいデフォルトのホーム画面[1]として自分自身を登録し、キーを処理できます。

フレームワークを変更せずに処理できない場合があると思います(現在アクティブなアプリケーションを表示するためにHomeを長押しするなど)-私も間違っている可能性があります。

しかし、それで十分なプロトタイプの場合。

いじくり回して楽しんでください!

[1]:

<intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.HOME" />
 <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
于 2010-01-15T11:56:37.437 に答える
17

これをカスタマイズして(メニューへのアクセスを無効にしたり、アプリケーションの追加を制限したりするなど)、キオスクを有効にすることができます。http://code.google.com/p/android-launcher-plus/

于 2012-04-25T11:49:47.533 に答える
17

新しいAndroidLプレビューで、Googleはまさにそれを行うタスクロックを発表しました。ただし、rootが必要なようです。

L Developer Previewは、ユーザーがアプリを離れたり、通知によって中断されたりするのを一時的に制限できる新しいタスクロックAPIを導入しています。これは、たとえば、Androidでハイステークス評価要件をサポートする教育アプリを開発している場合に使用できます。アプリがこのモードをアクティブにすると、アプリがモードを終了するまで、ユーザーは通知を表示したり、他のアプリにアクセスしたり、ホーム画面に戻ったりすることができなくなります。

不正使用を防ぐため、タスクロックを有効にできるのは承認されたアプリのみです。さらに、タスクロック認証は、メソッドを介して、特別に構成されたデバイス所有者アプリによって付与される必要があります android.app.admin.DevicePolicyManager.setLockTaskComponents()

デバイスの所有者を設定するには、次の手順に従います。

  • Androiduserdebugビルドを実行しているデバイスを開発マシンに接続します。
  • デバイス所有者アプリをインストールします。
  • ファイルを作成し、デバイスdevice_owner.xmlのディレクトリに保存し/data/systemます。
$ adb root
$ adb shell stop
$ rm /tmp/device_owner.xml
$ echo "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>" >> /tmp/device_owner.xml
$ echo "&device-owner package=\"<your_device_owner_package>\" name=\"*<your_organization_name>\" />" >> /tmp/device_owner.xml
$ adb push /tmp/device_owner.xml /data/system/device_owner.xml
$ adb reboot

アプリでタスクロックAPIを使用する前に、DevicePolicyManager.isLockTaskPermitted()を呼び出して、アクティビティが承認されていることを確認してください。

タスクロックを有効にするにandroid.app.Activity.startLockTask() は、許可されたアクティビティから呼び出します。

タスクロックがアクティブな場合、次の動作が有効になります。

  • ステータスバーは空白で、ユーザー通知とステータス情報は非表示になっています。
  • [ホーム]ボタンと[最近のアプリ]ボタンは非表示になっています。
  • 他のアプリは新しいアクティビティを起動しない場合があります。
  • 現在のアプリは、新しいタスクを作成しない限り、新しいアクティビティを開始できます。
  • 承認されたアクティビティがを呼び出すまで、ユーザーはアプリでロックされたままになります Activity.stopLockTask()
于 2014-07-02T20:01:46.310 に答える
9

しばらくこれを検索した後、私は良い解決策を思いついた。これはルート化されたデバイスでのみ機能しますが、この1つのアプリだけの場合は、ルート化は問題にならないはずです。

別の方法については、http://thebitplague.wordpress.com/2013/04/05/kiosk-mode-on-the-nexus-7/もチェックしてください

于 2013-08-02T12:15:00.333 に答える
5

起動時にアプリを起動する

これを実現する最良の方法は、アプリをランチャーとして設定することです

<activity ...
  android:launchMode="singleInstance"
  android:windowActionBar="false">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.HOME" />
      <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

アプリをロックする

最も信頼できる方法は、Lollipop以上のデバイスを使用して使用することです

startLockTask

まず、アプリをデバイスの所有者として設定する必要があります。注意:デバイスはプロビジョニングされていない必要があります。登録した場合は、工場出荷時のリセットを行い、アカウント登録をスキップする必要があります。

アプリを登録できるようにするには、最初にDeviceAdminReceiverコンポーネントを設定する必要があります。

package com.example.myapp;

public class MyDeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver {
    @Override
    public void onEnabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission received", Toast.LENGTH_SHORT).show();
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return "are you sure?";
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission revoked", Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onLockTaskModeExiting(Context context, Intent intent) {
        // here you must re-lock your app. make your activity know of this event and make it call startLockTask again!
    }
}

プロビジョニングされていないデバイスを入手したら、adbから次のコマンドを起動できます(ルートは必要ありません

adb shell dpm set-device-owner com.example.myapp/.MyDeviceAdminReceiver

Androidがユーザーにアプリを固定するための権限を要求しないようにするには、setLockTaskPackagesを呼び出す必要があります

ついに!

@Override
public void onResume(){
    super.onResume();
    DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager) getSystemService(
            Context.DEVICE_POLICY_SERVICE);
    ComponentName mAdminComponentName = new ComponentName(getApplicationContext(), MyDeviceAdminReceiver.class);
    mDevicePolicyManager.setLockTaskPackages(mAdminComponentName, new String[]{getPackageName()});
    startLockTask();
}
@Override
public void finish(){
    stopLockTask();
    super.finish();
}
于 2016-07-27T08:36:29.823 に答える
5

Googleは最近AndroidManagementAPIをリリースしましたこれにより、Android 5.1以降を実行しているAndroidデバイスのキオスクモードを簡単に設定したり、その他のさまざまなポリシーを設定したりできます。

于 2017-09-15T07:38:47.847 に答える
4

アンドロイド開発者の単一目的デバイスのセットアップページは、そこからより多くのことを簡単に知ることができるこのことを説明しています。

これで、 Android 6.0 Marshmallow以降のデバイスを企業所有の使い捨て(COSU)デバイスとして簡単に構成できます。

于 2016-10-03T12:46:51.833 に答える
2

このフォーラムの投稿で別の可能なテクニックを見つけました。その投稿を引用する:

http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/10839-android-kiosk-mode-tutorial.html

次の方法を使用して、「通常の」ユーザーがアプリケーション以外のもので遊ぶのを防ぐアプリケーションを構築できます。

アプリケーションは2つのモジュールで構成されています。主な活動とサービス。サービスは起動時に開始するように構成されています。サービスが開始されると、アクティビティが実行されているかどうかがチェックされます。実行されていない場合は、タイマーを使用してメインアクティビティを開始します。

アクティビティが一時停止されると、サービスが1秒で開始するようにスケジュールされます。コード:

Sub Activity_Pause (UserClosed As Boolean)
    If kiosk Then StartServiceAt(KioskService, DateTime.Now + 1 * DateTime.TicksPerSecond, false)    
End Sub

ユーザーがホーム画面を押すと、ホーム画面が数秒間表示されます。ただし、アプリケーションは数秒後に前面に戻り、ユーザーは他のアプリケーションと対話したり、設定を変更したりできなくなります。

サービスはフォアグラウンドサービスに設定されています。これにより、Androidがサービスを強制終了するのを防ぎます。停止ボタンを押して、キオスクモードを無効にします。

ダウンロード可能なキオスクモードコードのZIPファイルの例もあるようです。

于 2012-02-01T22:06:01.730 に答える
2

Xposedフレームワークはこれを行うことができます。ルートが必要であり、すべてのプラットフォームで機能しない可能性があります。クラスandroid.app.StatusBarManagerでdisable()メソッドを探します。

ここAndroidのソースコードで

独自のモジュールを作成する方法については、こちらをご覧ください: Xposed開発チュートリアル

一見すると思っているよりずっと簡単です。幸運を!

于 2015-08-20T08:02:29.833 に答える
0

BOOTレシーバーを使用してアプリケーションをセットアップし、ステータスバーの拡張を防ぐためのこの回答に加えて、このソリューションは4.4以降で完全なキオスクアプリとして機能します。

onCreate()に配置します。

    final View view = (View) findViewById(android.R.id.content);
    if (view != null) {
        //"hides" back, home and return button on screen. 
        view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE |
                                   View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                   View.SYSTEM_UI_FLAG_IMMERSIVE |
                                   View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                   View.SYSTEM_UI_FLAG_FULLSCREEN);
        view.setOnSystemUiVisibilityChangeListener
                (new View.OnSystemUiVisibilityChangeListener() {
                    @Override
                    public void onSystemUiVisibilityChange(int visibility) {
                        // Note that system bars will only be "visible" if none of the
                        // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
                        if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                            view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE |
                                    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                    View.SYSTEM_UI_FLAG_IMMERSIVE |
                                    View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                    View.SYSTEM_UI_FLAG_FULLSCREEN);
                        }
                    }
                });
    }

これにより、戻るボタン、アプリ、ホームボタンが完全に非表示になります。

于 2016-03-25T18:05:37.123 に答える
0

キオスクモードは、Androidデバイスの電源を入れたときに1つまたは一連のアプリケーションをロックすることに他なりません。これは、ロックタスクモードで実現できます。デバイスがロックタスクモードで実行されている場合、ユーザーは通常、通知を表示したり、ホワイトリストに登録されていないアプリにアクセスしたり、ホーム画面に戻ったりすることはできません。

デバイスポリシーコントローラー(DPC)は、システムがロックタスクモードのときに実行できるアプリをホワイトリストに登録できます。特定の目的のための専用デバイスであるため、デバイスを使用している人はロックタスクモードを終了できません。Android 5.0以降のデバイスは、ロックタスクモードで実行できます。

    •        Whitelisting the applications

最初のステップは、DPCによってアプリケーションをホワイトリストに登録することです。DPCは、を呼び出すことにより、ロックタスクモードで使用できるアプリをホワイトリストに登録できます。

DevicePolicyManager.setLockTaskPackages()

    ▪         Start lock task mode

ホワイトリストへの登録が完了すると、DPCは以下の関数を呼び出してロックタスクを開始できます。

ActivityOptions.setLockTaskEnabled()

ロックタスクモードの詳細については、こちらをご覧ください。https://developer.android.com/work/dpc/dedicated-devices/lock-task-mode

于 2020-09-08T10:16:09.650 に答える