2017-05-31 176 views
0

我想通過使用COSU(企業擁有的單一用途)功能使Unity應用程序進入展臺模式。adb外殼dpm set-device-owner與Unity問題

我的計劃是第一個得到的東西只使用Android的工作,所以我接着Google Code Labs

提供的教程中,我得到了這個工作後,我的計劃是再弄清楚如何將這種融入我的Unity工程。我跟着 this youtube video顯示如何製作一個可以從Unity調用的插件。

當我建立我的項目,我嘗試執行以下命令

adb shell dpm set-device-owner com.modalvr.unityplugin/.DeviceAdminReceiver 

不過,我不斷收到以下錯誤

Error: Unknown admin: ComponentInfo{com.modalvr.unityplugin/com.modalvr.unityplugin.DeviceAdminReceiver} 

不知團結未合併的AndroidManifest.xml一起正確地文件。這是來自插件的我的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> 

我複製它和classes.jar文件轉換成統一的資產/插件/ Android的/ libs文件夾

我能夠成功調用函數在我的插件,所以插件似乎正確設置。

以供參考,這是在調用插件

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類,定義了這些功能。

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; 
    } 
} 

它看起來像統一生成,它使得在溫度/ 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> 

在這些文件都沒有看到我的Android插件AndroidManifest.xml的內容我想這就是issu即我需要做些什麼來使清單文件合併?

以及物品是否完整,這裏是

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

我需要做些事情來使清單文件合併?

是的。

如果您將Java插件編譯爲.arar包,Unity中的清單將自動合併只有。如果您將其構建爲.jar文件,則必須手動將Manifest放置在Unity中的正確文件夾中,以便Unity在生成過程中將其合併到您的程序中。

您目前正在建設作爲的.jar庫,下面是在哪裏放置清單:

的AndroidManifest.xml文件在您的<ProjectName>Assets\Plugins\Android文件夾中。請務必拼寫AndroidManifest以及正確放置的文件夾名稱。而已。

+0

我已經更新了我的項目以生成.aar文件,現在我可以正確合併文件。謝謝。 – Dalanchoo