2016-04-01 12 views
0

こんにちは、私は現在、アンドロイドプラグインをビルドしようとしています:Unity3D内にNoodlePermissionGranterがあり、実行時に危険なアクセス権を要求できます。android unity3dプラグインを作成するMarshmallow 6.0 dangerous permissions

私は、stackoverflowの別の質問でプラグインを見つけました。トピックから使用

回答:[ Implementing Android 6.0 permissions in unity3d]

私はそれが簡単に構築するために作るためにいくつかの変更をしたが、期待どおりに動作していません。

プラグインがまだ許可されていない場合、危険なアクセス権を要求する必要があります。 パーミッションを要求しようとすると、すぐにPERMISSION_DENIEDにコールバックされます。

私の悪い英語を申し訳ありません。

EDIT:エラーはありません。

NoodlePermissionGranter.Java

package com.noodlecake.unityplugins; 


     /////////////////////////////////////////////////////////// 
    ///////////////// NoodlePermissionGranter ///////////////// 
    /// Implements runtime granting of Android permissions. /// 
    /// This is necessary for Android M (6.0) and above. ////// 
    /////////////////////////////////////////////////////////// 
//////////////////// Noodlecake Studios /////////////////// 
/////////////////////////////////////////////////////////// 

import android.Manifest; 
import android.os.Build; 
import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.util.Log; 
import android.content.pm.PackageManager; 
import com.unity3d.player.UnityPlayer; 

public class NoodlePermissionGranter 
{ 
    // Only implements WRITE_EXTERNAL_STORAGE so far. 
    // Implement the rest by matching the enum in NoodlePermissionGranter.cs 
    // to the getPermissionStringFromEnumInt below. 

    private final static String UNITY_CALLBACK_GAMEOBJECT_NAME = "NoodlePermissionGranter"; 
    private final static String UNITY_CALLBACK_METHOD_NAME = "permissionRequestCallbackInternal"; 
    private final static String PERMISSION_GRANTED = "PERMISSION_GRANTED"; // this will be an arg to the above method 
    private final static String PERMISSION_DENIED = "PERMISSION_DENIED"; 

    public static String getPermissionStringFromEnumInt(int permissionEnum) throws Exception 
    { 
     switch (permissionEnum) 
     { 
      case 0: 
       return Manifest.permission.WRITE_EXTERNAL_STORAGE; 
      case 1: 
       return Manifest.permission.READ_PHONE_STATE; 
      case 2: 
       return Manifest.permission.READ_EXTERNAL_STORAGE; 
      // "and the rest is still unwritten" - Natasha Bedingfield 
     } 
     Log.e("NoodlePermissionGranter", "Error. Unknown permissionEnum " + permissionEnum); 
     throw new Exception(String.format("Error. Unknown permissionEnum %d",permissionEnum)); 
    } 

    public static void grantPermission(Activity currentActivity, int permissionEnum) 
    { 
     // permission enum must match ordering in NoodlePermissionGranter.cs 
     final Activity act = currentActivity; 
     Log.i("NoodlePermissionGranter","grantPermission " + permissionEnum) ; 
     if (Build.VERSION.SDK_INT < 23) { 
      Log.i("NoodlePermissionGranter","Build.VERSION.SDK_INT < 23 (" + Build.VERSION.SDK_INT+")"); 
      return; 
     } 

     try 
     { 
      final int PERMISSIONS_REQUEST_CODE = permissionEnum; 
      final String permissionFromEnumInt = getPermissionStringFromEnumInt(permissionEnum); 
      if (currentActivity.checkCallingOrSelfPermission(permissionFromEnumInt) == PackageManager.PERMISSION_GRANTED) { 
       Log.i("NoodlePermissionGranter", "already granted"); 
       UnityPlayer.UnitySendMessage(UNITY_CALLBACK_GAMEOBJECT_NAME, UNITY_CALLBACK_METHOD_NAME, PERMISSION_GRANTED); 
       return; 
      } 

      final FragmentManager fragmentManager = currentActivity.getFragmentManager(); 
      final Fragment request = new Fragment() { 

       @Override public void onStart() 
       { 
        super.onStart(); 
        Log.i("NoodlePermissionGranter","fragment start"); 
        String[] permissionsToRequest = new String [] {permissionFromEnumInt}; 
        Log.i("NoodlePermissionGranter","fragment start " + permissionsToRequest[0]); 
        requestPermissions(permissionsToRequest, PERMISSIONS_REQUEST_CODE); 
       } 

       @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) 
       { 
        Log.i("NoodlePermissionGranter", "onRequestPermissionsResult"); 
        if (requestCode != PERMISSIONS_REQUEST_CODE) 
         return; 

        if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
         // permission was granted, yay! Do the 
         // contacts-related task you need to do. 
         Log.i("NoodlePermissionGranter", PERMISSION_GRANTED); 
         UnityPlayer.UnitySendMessage(UNITY_CALLBACK_GAMEOBJECT_NAME, UNITY_CALLBACK_METHOD_NAME, PERMISSION_GRANTED); 
        } else { 

         // permission denied, boo! Disable the 
         // functionality that depends on this permission. 
         Log.i("NoodlePermissionGranter",PERMISSION_DENIED); 
         UnityPlayer.UnitySendMessage(UNITY_CALLBACK_GAMEOBJECT_NAME, UNITY_CALLBACK_METHOD_NAME, PERMISSION_DENIED); 
        } 


        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
        fragmentTransaction.remove(this); 
        fragmentTransaction.commit(); 

        // shouldBeOkayToStartTheApplicationNow(); 
       } 
      }; 

      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.add(0, request); 
      fragmentTransaction.commit(); 
     } 
     catch(Exception error) 
     { 
      Log.w("[NoodlePermissionGranter]", String.format("Unable to request permission: %s", error.getMessage())); 
      UnityPlayer.UnitySendMessage(UNITY_CALLBACK_GAMEOBJECT_NAME, UNITY_CALLBACK_METHOD_NAME, PERMISSION_DENIED); 
     } 
    } 

} 

NoodlePermissionGranter.sh

export JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 
ClASSPATH="classes.jar" 

javac NoodlePermissionGranter.java -bootclasspath android.jar -classpath $ClASSPATH -d . 
javap -s com.noodlecake.unityplugins.NoodlePermissionGranter 
jar cvfM NoodlePermissionGranter.jar com/ 
rm -rf com 
read -p "Press any key to continue... " -n1 -s 

EDIT

Logcat

04-01 16:13:44.656 5504 5518 I NoodlePermissionGranter: grantPermission 1 
04-01 16:13:44.657 5504 5504 I NoodlePermissionGranter: fragment start 
04-01 16:13:44.657 5504 5504 I NoodlePermissionGranter: fragment start android.permission.READ_PHONE_STATE 
04-01 16:13:44.658 5504 5518 I NoodlePermissionGranter: grantPermission 0 
04-01 16:13:44.659 5504 5518 I NoodlePermissionGranter: grantPermission 2 
04-01 16:13:44.667 5504 5504 I NoodlePermissionGranter: fragment start 
04-01 16:13:44.667 5504 5504 I NoodlePermissionGranter: fragment start android.permission.WRITE_EXTERNAL_STORAGE 
04-01 16:13:44.675 5504 5504 I NoodlePermissionGranter: fragment start 
04-01 16:13:44.675 5504 5504 I NoodlePermissionGranter: fragment start android.permission.READ_EXTERNAL_STORAGE 
04-01 16:13:44.906 5504 5504 I NoodlePermissionGranter: onRequestPermissionsResult 
04-01 16:13:44.907 5504 5504 I NoodlePermissionGranter: PERMISSION_DENIED 
04-01 16:13:44.907 5504 5504 I NoodlePermissionGranter: onRequestPermissionsResult 
04-01 16:13:44.907 5504 5504 I NoodlePermissionGranter: PERMISSION_DENIED 
04-01 16:13:44.907 5504 5504 I NoodlePermissionGranter: onRequestPermissionsResult 
04-01 16:13:44.907 5504 5504 I NoodlePermissionGranter: PERMISSION_DENIED 

答えて

0

Androidマニフェストは危険な権限を持っているかどうかをチェックしてください!

これは私の問題でした。

関連する問題