UnityからAndroidのネイティブのアクティビティを呼び出す方法について
画面上のボタンを押したら下記のAndroidのネイティブの関数を呼び出すapkを作成し、ボタンを押してみたところ何も起こりませんでした。
public static void launchActivity(String type, final Activity m_activity) {
Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN);
i.setClassName(m_activity,type);
m_activity.startActivity(i);
}
AndroidDeveiceMonitorでログを確認したところ、下記のように出力されていました。
01-25 16:43:24.392: E/Unity(675): AndroidJavaException: android.content.ActivityNotFoundException: Unable to find explicit activity class {test.testCompany.testProductName/com.example.app2.NativeActivity}; have you declared this activity in your AndroidManifest.xml?
01-25 16:43:24.392: E/Unity(675): android.content.ActivityNotFoundException: Unable to find explicit activity class {test.testCompany.testProductName/com.example.app2.NativeActivity}; have you declared this activity in your AndroidManifest.xml?
01-25 16:43:24.392: E/Unity(675): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1820)
01-25 16:43:24.392: E/Unity(675): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1531)
01-25 16:43:24.392: E/Unity(675): at android.app.Activity.startActivityForResult(Activity.java:4399)
01-25 16:43:24.392: E/Unity(675): at android.app.Activity.startActivityForResult(Activity.java:4358)
01-25 16:43:24.392: E/Unity(675): at android.app.Activity.startActivity(Activity.java:4682)
01-25 16:43:24.392: E/Unity(675): at android.app.Activity.startActivity(Activity.java:4650)
01-25 16:43:24.392: E/Unity(675): at com.example.activitylauncher.ActivityLauncher.launchActivity(ActivityLauncher.java:13)
01-25 16:43:24.392: E/Unity(675): at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
01-25 16:43:24.392: E/Unity(675): at com.un
1行目から「com.example.app2.NativeActivity」というアクティビティがAndroidManifestに宣言されていないことを読み取り、Assets\Plugin\Android\AndroidManifest.xmlを確認してみたのですが、下記の通り13行目以降に書かれていました。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="test.testCompany.testProductName" xmlns:tools="http://schemas.android.com/tools" 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="@mipmap/app_icon" android:label="@string/app_name" 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|density" android:hardwareAccelerated="false">
<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>
<activity android:name="com.example.app2.NativeActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation">
</activity>
<meta-data android:name="unity.build-id" android:value="e0641605-811c-4985-bbb2-ffccc3607b0a" />
<meta-data android:name="unity.splash-mode" android:value="0" />
<meta-data android:name="unity.splash-enable" android:value="True" />
</application>
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.INTERNET" />
<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>
そこでapkをビルドする際に生成される最終的なAndroidManifest(Temp/StagingArea/AndroidManifest.xml )を確認してみたところ、下記のようにアクティビティ「com.example.app2.NativeActivity」を宣言している行がなくなっていました。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="test.testCompany.testProductName" android:versionCode="1" android:versionName="0.1" android:installLocation="preferExternal">
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="28" />
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:xlargeScreens="true" />
<application android:icon="@mipmap/app_icon" android:label="@string/app_name" android:theme="@style/UnityThemeSelector" 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|density" android:hardwareAccelerated="false">
<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>
<meta-data android:name="unity.build-id" android:value="9b306d5b-fda5-490e-b9ca-1e6a241216b0" />
<meta-data android:name="unity.splash-mode" android:value="0" />
<meta-data android:name="unity.splash-enable" android:value="True" />
</application>
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.INTERNET" />
<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>
何かご存知の方がいらっしゃいましたらご教示いただければ幸いです。