web-dev-qa-db-ja.com

プログラムによるサードパーティアプリの画面固定

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

開発者のWebサイトから、簡単な説明から、私が試みていることを実行できることがわかります。

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

プログラムで:画面の固定をプログラムでアクティブにするには、アプリからstartLockTask()を呼び出します。リクエストしているアプリがデバイスの所有者でない場合、ユーザーは確認を求められます。 デバイス所有者アプリは、setLockTaskPackages()メソッドを呼び出して、ユーザーの確認手順なしでアプリを固定できるようにします。

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

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

任意の助けいただければ幸いです。

14
kash

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

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

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

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

startLockTask(); 

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

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

アプリがsetLockTaskPackages()を含むregisteredの場合、手動ピンとは異なる動作があることに注意してください。

  • ユーザーはBack+Recent Appsを長押しして手動でアプリケーションの固定を解除することはできません。 )。プログラムでstopLockTask()を使用してアプリの固定を解除する必要があります。
  • [ホーム]ボタンと[最近のアプリ]ボタンは非表示(表示されません)
  • アプリの固定が解除されると(stopLockTask()を介して)、ユーザーは直接ホームに戻ります。キーガードが設定されていても(パターン、コード、またはその他のキーガード画面)、画面ロックは表示されません。
13
Florent Dupont

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

@Override public void onLockTaskModeExiting(Context context、Intent intent)

したがって、ユーザーがピン留めを解除したい場合は、いつでもアプリをピン留めできます;)

3
Paolo Moschini

以下に、コードスニペットを示します。

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
}
0
CzarMatt