17

デバイスの所有権を取得した後、特定のアプリをキオスク モード (または画面固定モード) にロックするようにデバイスに指示する方法を実装しようとしています。私はデバイスの所有権を持っているので、ユーザーはそうする許可を求められません。

開発者のウェブサイトから、簡単な説明は、私がしようとしていることを行うことが可能であることを教えてくれます:

http://developer.android.com/about/versions/android-5.0.html#ScreenPinning

プログラムによる: プログラムで画面固定を有効にするには、アプリから startLockTask() を呼び出します。要求元のアプリがデバイスの所有者でない場合、ユーザーは確認を求められます。デバイス オーナー アプリは setLockTaskPackages() メソッドを呼び出して、ユーザーの確認手順なしでアプリをピン留めできるようにすることができます。

これは、デバイス所有者アプリとして、ユーザーの確認なしで他のアプリをピン留めできることを示しています...しかし、方法がわかりません。

自分のアプリを固定モードにすることができました。

どんな助けでも大歓迎です。

4

3 に答える 3

14

は、ユーザーの確認なしsetLockTaskPackages()でプログラムによって固定できるアプリケーションを (パッケージ名を通じて) 指定するために使用されます。は、デバイス所有者アプリから呼び出されます(ほとんどの場合、のメソッドで)。setLockTaskPackages()DeviceAdminReceiveronEnabled()

したがって、所有者のデバイス アプリには、次のようなものがあります。

mDPM.setLockTaskPackages("com.foo.myapp");

次に、「com.foo.myapp」アプリケーションで、次の呼び出しが自動化されます。

startLockTask(); 

アプリケーションは、ユーザーの確認なしで、すぐに固定モードに入ります。

register最初に でアプリケーションを作成しない場合setLockTaskPackages、アプリケーションは固定されますが、ユーザーは最初に確認する必要があります。

registeredまた、アプリがを使用している場合、手動ピン留めsetLockTaskPackages()とは動作が異なることにも注意してください。

  • ユーザーはBack + Recent Appsを長押しして手動でアプリケーションの固定を解除することはできません。プログラムでアプリの固定を解除する必要がありますstopLockTask();
  • 「ホーム」ボタンと「最近のアプリ」ボタンが見えない(表示されない)
  • アプリが (stopLockTask() を介して) 固定解除されると、ユーザーは直接 Home に戻ります。キーガードが設定されていても (パターン、コード、または任意のキーガード画面)、画面ロックは表示されません。
于 2015-01-29T11:03:11.067 に答える
3

コメントするほどの評判はありませんが、物理ボタンを備えたデバイス (@chairman が言及した Samsung Galaxy Tab A など) の場合、アプリケーションの強制的な固定解除を管理する 1 つの方法は、DeviceAdminReceiver クラスに実装することです。続く:

@Override public void onLockTaskModeExiting(コンテキスト コンテキスト、インテント インテント)

したがって、ユーザーが固定を解除したい場合は、いつでもアプリを再固定できます;)

于 2016-02-17T08:05:27.193 に答える
0

これは、あなたを動かすはずのコードスニペットです:

DevicePolicyManager myDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);

if (myDevicePolicyManager.isDeviceOwnerApp(this.getPackageName())) {
    // Device owner
    String[] packages = {this.getPackageName()};
    myDevicePolicyManager.setLockTaskPackages(mDeviceAdminSample, packages);
} else {
    // Not a device owner - prompt user or show error
}

if (myDevicePolicyManager.isLockTaskPermitted(this.getPackageName())) {
    // Lock allowed
    startLockTask();
} else {
    // Lock not allowed - show error or something useful here
}
于 2015-01-29T00:14:05.803 に答える