UnityアプリケーションをCOSU(Corporate Owned Single Use)機能を使用してキオスクモードにするようにしようとしています。adbシェルdpm set-device-owner with Unity issue
私の計画は最初だけのAndroidを使用して作業し、物事を得ることだったので、私はこの作業を得た後、私はGoogle Code Labs
によって提供されるチュートリアルに続く、私の計画はその後、私のユニティプロジェクトにこれを統合する方法を見つけ出すことでした。 Unityから呼び出すことができるプラグインを作る方法を示した0this youtube videoに続きました。私は私のプロジェクトをビルドするとき
は、私はUnityはAndroidManifest.xmlををマージされていない場合、私は疑問に思う
adb shell dpm set-device-owner com.modalvr.unityplugin/.DeviceAdminReceiver
は、しかし、私は次のエラー
Error: Unknown admin: ComponentInfo{com.modalvr.unityplugin/com.modalvr.unityplugin.DeviceAdminReceiver}
を得続ける、次のコマンドを実行してみてくださいファイルを正しく一緒にします。ここに、プラグインからのAndroidManifest.xmlファイルがあります。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.modalvr.unityplugin">
<application android:allowBackup="true" android:label="@string/app_name" android:supportsRtl="true">
<receiver
android:name="com.modalvr.unityplugin.DeviceAdminReceiver"
android:description="@string/app_name"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin_receiver" />
<intent-filter>
<action android:name="android.intent.action.DEVICE_ADMIN_ENABLED"/>
<action android:name="android.intent.action.PROFILE_PROVISIONING_COMPLETE"/>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
</manifest>
私は首尾よく私のプラグインで機能を呼び出すことができていますので、プラグインが正しく設定されるように見えるユニティの資産/プラグイン/アンドロイド/ libsのフォルダに
をそれとclasses.jarファイルをコピーします。参考のため
が、これはプラグイン
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LockManager : MonoBehaviour {
#if UNITY_ANDROID
private AndroidJavaObject playerActivityContext = null;
#endif
public void SaveContext() {
#if UNITY_ANDROID
// First, obtain the current activity context
using (var actClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) {
playerActivityContext = actClass.GetStatic<AndroidJavaObject>("currentActivity");
}
var plugin = new AndroidJavaClass("com.modalvr.unityplugin.PluginClass");
plugin.CallStatic<bool>("setContext", playerActivityContext);
#endif
}
public void LockButtonClicked() {
#if UNITY_ANDROID
SaveContext();
var plugin = new AndroidJavaClass("com.modalvr.unityplugin.PluginClass");
bool retVal = plugin.CallStatic<bool>("lock", 7);
#endif
}
public void UnlockButtonClicked() {
#if UNITY_ANDROID
SaveContext();
var plugin = new AndroidJavaClass("com.modalvr.unityplugin.PluginClass");
bool retVal = plugin.CallStatic<bool>("unlock", 7);
#endif
}
}
に呼び出して、私のC#のコードであり、これはこれらの機能を定義するJavaクラスです。 Unityはそれが一時に置く2つのXMLファイル/ StagingArea
AndroidManfist.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ModalVR.KioskPluginTest" xmlns:tools="http://schemas.android.com/tools" android:versionName="1.0" android:versionCode="1" android:installLocation="preferExternal">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
<application android:theme="@style/UnityThemeSelector" android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false" android:isGame="true" android:banner="@drawable/app_banner">
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="25" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
</manifest>
とAndroidManifest-main.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ModalVR.KioskPluginTest" xmlns:tools="http://schemas.android.com/tools" android:installLocation="preferExternal" android:versionName="1.0" android:versionCode="1">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
<application android:theme="@style/UnityThemeSelector" android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="true">
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="25" />
</manifest>
でを生成よう
package com.modalvr.unityplugin;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
public class PluginClass {
private static Context context;
public static boolean setContext(Context ctx) {
context = ctx;
return true;
}
public static boolean lock(int number) {
Log.d("SOME TAG", "onReceive Lock");
Activity activity = (Activity) context;
activity.startLockTask();
return true;
}
public static boolean unlock(int number) {
Log.d("SOME TAG", "onReceive Unlock");
Activity activity = (Activity) context;
activity.stopLockTask();
return true;
}
}
に見えますこれらのファイルのどちらも私のAndroidプラグインAndroidManifest.xmlの内容を見ることはできません。私はそれがissuだと思いますe。マニフェストファイルをマージするには何かする必要がありますか?
万全を期すために、ここで
DeviceAdminReceiver.java
は、任意の助けを事前にpackage com.modalvr.unityplugin;
import android.content.ComponentName;
import android.content.Context;
/**
* Handles events related to the managed profile.
*/
public class DeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver {
private static final String TAG = "DeviceAdminReceiver";
/**
* @param context The context of the application.
* @return The component name of this component in the given context.
*/
public static ComponentName getComponentName(Context context) {
return new ComponentName(context.getApplicationContext(), DeviceAdminReceiver.class);
}
}
おかげです。 John Lawrie
.aarファイルを生成するようにプロジェクトを更新しました。これで、ファイルが正しくマージされます。ありがとう。 – Dalanchoo