2017-01-30 6 views
2

ステータスユニティGearVRを取り除く「許可を要求...」

:私が構築し、GearVRでアプリをインストールしたら、それはデフォルトで尋ねまだ

問題

を解決していません

XXXは、お使いの端末の写真、メディア、ファイルへのアクセスを許可しています。許可しますか?

許可/ Iは、上記のもののいずれかにアクセスするために私のアプリを必要としない

を拒否します。これをプログラムで取り除くにはどうすればよいですか?

編集1

Unityが自動的に何らかの理由で任意のビルドにREAD_EXTERNAL_STORAGEを追加しているようです。

アンドロイドマニフェストをマージすることができません2

OVRPlugin原因

編集...:ビルドがメッセージで失敗して許可を取り除くと、ユニティの新しいバージョンでは役立ちません。この問題と現時点では

https://forum.unity3d.com/threads/how-to-remove-android-permission-read_external_storage.429369/

ユニティフォーラムは、解決しそうにないと言います。まだいくつかの回避策がありますか?

編集3

Unityがそれらの許可を求めるビルドを理由 オクルスはそれに取り組んでいる

は、我々はいくつかの時間前、まだないように注意してください2月

https://forums.oculus.com/developer/discussion/42465/is-android-permission-read-external-storage-a-must-when-using-unity#latest

答えて

1

私はこの時につまずくで修正を受けるべき。とにかくそれらを取り除くために、あなたは、回避策として、エディタのスクリプトを使用することができます。

protected void BuildAPKCustom(string buildPath) 
{ 
    bool manifestFileExists = false; 
    if(File.Exists(Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml"))) 
    { 
     manifestFileExists = true; 
     File.Copy(Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml"), Path.Combine(Application.dataPath, "Plugins/Android/tmpManifestFile.xml")); 
     File.Delete(Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml")); 
    } 

    string[] levels = new string[EditorSceneManager.sceneCount]; 
    for (int i = 0; i < levels.Length; i++) 
    { 
     levels[i] = EditorSceneManager.GetSceneAt(i).path; 
    } 
    BuildPipeline.BuildPlayer(levels, buildPath, BuildTarget.Android, BuildOptions.None); 

    XNamespace android = "http://schemas.android.com/apk/res/android"; 
    string generatedXMLFilePath = Path.Combine(Application.dataPath, "../Temp/StagingArea/AndroidManifest.xml"); 
    XDocument doc = XDocument.Load(generatedXMLFilePath); 
    IEnumerable<XElement> permissionElements = doc.Root.Elements("uses-permission"); 
    foreach(XElement permission in permissionElements) 
    { 
     int potentialIndex = PERMISSIONS_NAMES_TO_DELETE.IndexOf(permission.Attribute(android + "name").Value.Replace("android.permission.", "")); 
     if(potentialIndex >= 0) 
     { 
      UnityEngine.Debug.Log("Permission deleted : " + PERMISSIONS_NAMES_TO_DELETE[potentialIndex]); 
      permission.Remove(); 
     } 
    } 

    XElement overwritenPermission; 
    for(int i = 0; i < PERMISSIONS_NAMES_TO_DELETE.Length; i++) 
    { 
     overwritenPermission = new XElement("uses-permission"); 
     overwritenPermission.Add(new XAttribute(android + "name", "android.permission." + PERMISSIONS_NAMES_TO_DELETE[i])); 
     overwritenPermission.Add(new XAttribute(android + "maxSdkVersion", "18")); 
     doc.Element("manifest").Add(overwritenPermission); 
    } 

    if(!Directory.Exists(Path.Combine(Application.dataPath, "Plugins/Android"))) 
    { 
     Directory.CreateDirectory(Path.Combine(Application.dataPath, "Plugins/Android")); 
    } 

    doc.Save(Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml")); 

    BuildPipeline.BuildPlayer(levels, buildPath, BuildTarget.Android, BuildOptions.None); 

    if(manifestFileExists) 
    { 
     File.Delete(Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml")); 
     File.Copy(Path.Combine(Application.dataPath, "Plugins/Android/tmpManifestFile.xml"), Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml")); 
     File.Delete(Path.Combine(Application.dataPath, "Plugins/Android/tmpManifestFile.xml")); 
    } 

    Process.Start(Path.GetDirectoryName(buildPath)); 
} 

PERMISSIONS_NAMES_TO_DELETEを削除する権限名のstring[]ている権限名は、あなたがhereを見ることができるリストを取得するには。)

何それがないことである:

  • に(存在する場合)、前のAndroidManifest.xmlファイルを取得/ Android/Plugins/フォルダにコピーして、一時的なものにコピーして削除してください。
  • UnityにAndroidManifestを生成させる最初のビルドを実行してください。マニフェストは、「削除」、不必要な権限に彼自身の
  • 編集上のXMLファイルが
  • が正しく
マニフェストセットを有する第2のビルドを実行 /アンドロイド/プラグイン/に編集したマニフェストを保存します

権限削除の背後にあるアイデアは、最大APIレベルをこのようなより低いレベルに設定することです。アクセス権は使用できません(このAPIレベルではMUSTが存在することに注意してください)。

は、この情報がお役に立てば幸い、

+0

は素敵なデザインの答えをありがとう!それが動作するかどうかテストして教えてください。 – igorpavlov

+0

これは動作しません。ビルドに失敗し、「アンドロイドマニフェストをマージできません」というメッセージが表示されます。 – igorpavlov

+0

ビルド設定で一致する 'minSDKVersion'を変更する必要があります(残念ながら忘れてしまいました)。 – Kardux

関連する問題