2014/03/20(Thu) 13:51:51 編集(投稿者)
こんにちは、お返事ありがとうございました
ただ、案1も案2も実験では成功したのですが、実際に使う場合ではどちらも失敗でした
実際に使うxmlはAndroidソフトを作るときに使うマニフェストファイルで、以下のようなものです(最初から書いておけばよかったですね。すみません)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xxx.xxx.xxx" android:theme="@android:style/Theme.NoTitleBar" 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:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false">
<activity android:label="@string/app_name" android:name="xxx.xxx.xxx.ImmersiveFullScreenActivity" android:screenOrientation="sensorLandscape" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale">
<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" />
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
</application>
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="18" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-feature android:name="android.hardware.touchscreen" />
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
</manifest>
書き換えたいのが
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
の部分であり、ここのvalueをtrueにします
ということで、案1の場合は以下のように書いてみました
var doc = XDocument.Load(path);
XNamespace nAB="http://schemas.android.com/apk/res/android";
var q = from atr in doc.Root.Elements("meta-data").Attributes(nAB + "name")
where atr.Value == "unityplayer.ForwardNativeEventsToDalvik"
select atr.Parent.Attribute("android:value");
foreach (var item in q)
{
if(item.Value == "false")
item.Value = "true";
}
doc.Save(path);
しかし、itemの値がnullになり失敗しました
案2の場合は以下のように書いてみました
var doc = new XmlDocument();
doc.Load(path);
var xmlnsManager = new XmlNamespaceManager(doc.NameTable);
xmlnsManager.AddNamespace("android","http://schemas.android.com/apk/res/android");
var atr = doc.SelectSingleNode("/manifest/application/activity/meta-data[@android:name='unityplayer.ForwardNativeEventsToDalvik']/@value",xmlnsManager);
if(atr != null && atr.Value == "false")
{
atr.Value = "true";
}
doc.Save(path);
こちらではatrの値がnullとなり失敗しました。
どちらにせよノードの構造がかなり複雑なので、私がパスの指定の方法を間違えた公算が高いのですが、それ以外にも原因があるのか、よろしければ教えていただけないでしょうか?