###前提・実現したいこと
Android Studio2.1で、Android 6.0 (APIレベル23)の新しいパーミッション処理に対応したパーミッション管理クラスをAndroid Libraryに作り、それをaar形式でUnityにいれて呼び出したいのですが、呼び出しができません。
新パーミッション対応するためにcheckSelfPermission()メソッドや、requestPermissions()メソッドを使いますが、色々試した結果これらは Activityや AppCompatActivityの継承が必要らしく、この継承をさせるとライブラリ(?)としてうまくいきません。
Activityを使用せずにこれらのメソッドは使えるのでしょうか?Activityが必要な場合どう連携させるかわかりません。
また、Unityとの連携させる場合のAS側の実機でのエラー確認方法もよくわからないのですがどのような方法がありますでしょうか?
Unity側スクリプトで呼び出す箇所はエラーを出さないのでどうすればよいか困っています。
Android Studioは初めてさわるので質問が変かもしれません
###該当のソースコード
java
1//Android Studio 2package jp.co.test.dialog_plugin; 3import android.Manifest; 4import android.annotation.TargetApi; 5import android.content.pm.PackageManager; 6import android.os.Build; 7import android.support.v7.app.AppCompatActivity; 8import android.telephony.TelephonyManager; 9import android.widget.Toast; 10import android.app.AlertDialog; 11import android.content.Context; 12 13public class NativeDialog extends AppCompatActivity{ 14 private static int MY_PERMISSIONS_REQUEST_READ_PHONE_STATE = 1; 15 16 //Unityから呼ばれる 17 static public void unityCall(Context context) 18 { 19 // Android 6, API 23以上でパーミッシンの確認 20 if(Build.VERSION.SDK_INT >= 23){ 21 NativeDialog n=new NativeDialog(); 22 n.Api23(); 23 } 24 else{ //Android 6未満 25 NativeDialog n= new NativeDialog(); 26 n.showLineNumber(); 27 } 28 } 29 30 //Android 6以上 31 @TargetApi(Build.VERSION_CODES.M) 32 protected void Api23() { 33 //Permissionをチェック 34 if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { 35 // 権限がない場合はリクエスト 36 requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, MY_PERMISSIONS_REQUEST_READ_PHONE_STATE); 37 } else { 38 showLineNumber(); 39 } 40 } 41 42 @TargetApi(Build.VERSION_CODES.M) 43 //requestPermissionsの結果がコールバックされます 44 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 45 if (MY_PERMISSIONS_REQUEST_READ_PHONE_STATE == requestCode) { 46 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 47 // 許可された 48 showLineNumber(); 49 } else { 50 // 拒否された 51 Toast.makeText(this, "拒否された", Toast.LENGTH_SHORT).show(); 52 } 53 } 54 } 55 56 private void showLineNumber() { 57 TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 58 Toast.makeText(this, telephonyManager.getLine1Number(), Toast.LENGTH_SHORT).show(); 59 } 60}
C#
1//Unity 2using UnityEngine; 3using System.Collections; 4using UnityEngine.UI; 5 6public class AndroidDialogTest : MonoBehaviour 7{ 8 public Text text; 9 10 void Start() 11 { 12 text.text = "Start"; 13 ShowDialog(); 14 } 15 16 void ShowDialog() 17 { 18#if UNITY_ANDROID 19 try 20 { 21 // Javaのオブジェクトを作成 22 AndroidJavaClass nativeDialog = new AndroidJavaClass("jp.co.test.dialog_plugin.NativeDialog"); 23 24 // Context(Activity)オブジェクトを取得する 25 AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 26 AndroidJavaObject context = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); 27 28 // AndroidのUIスレッドで動かす 29 context.Call("runOnUiThread", new AndroidJavaRunnable(() => 30 { 31 32 // Android studioのメソッドを呼び出す 33 nativeDialog.CallStatic( 34 "unityCall", 35 context 36 ); 37 })); 38#endif 39 }catch(UnityException e) 40 { 41 text.text = e.ToString(); 42 } 43 } 44}
###補足情報(言語/FW/ツール等のバージョンなど)
Android Studio2.1.2
Unity 5.3.5f1
参考にさせていただいたサイト
Unity用のAndroidプラグインを作ってみる
Android MのPermissionを試してみた

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2016/08/24 07:12
2016/08/24 08:24