2017-05-31 32 views
0

UnityアプリケーションをCOSU(Corporate Owned Single Use)機能を使用してキオスクモードにするようにしようとしています。adbシェルdpm set-device-owner with Unity issue

私の計画は最初だけのAndroidを使用して作業し、物事を得ることだったので、私はこの作業を得た後、私はGoogle Code Labs

によって提供されるチュートリアルに続く、私の計画はその後、私のユニティプロジェクトにこれを統合する方法を見つけ出すことでした。 Unityから呼び出すことができるプラグインを作る方法を示した0​​this 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

答えて

2

マニフェストファイルをマージするには何かする必要がありますか?

はい。あなたは.aarパッケージとしてJavaプラグインをコンパイルする場合

ユニティでのマニフェストが自動的にのみをマージします。 .jarというファイルを作成する場合は、マニフェストをUnityの正しいフォルダに手動で置く必要があります。これにより、ビルド中にUnityがそのファイルをあなたのプログラムにマージできるようになります。マニフェストを配置する場所を

あなたは現在とても以下の.jarライブラリとして構築するには、次のとおりです。

あなた<ProjectName>Assets\Plugins\Androidフォルダ内ののAndroidManifest.xmlファイルを置きます。 AndroidManifestと正しいフォルダ名を綴るようにしてください。それでおしまい。

+0

.aarファイルを生成するようにプロジェクトを更新しました。これで、ファイルが正しくマージされます。ありがとう。 – Dalanchoo