###前提・実現したいこと
Unityでゲームを作成しています。パーミッションの許可が必要なため、Unity用プラグインをAndroid Studioで作りaarファイルをUnityのPlugin->Androidに入れています。
以前ここで、(Android 6.0 からの)新しいパーミッション処理の質問をして、回答を頂きましたがAndroid 6.0の実機で確認してみるとrequestPermissionsの結果のコールバックonRequestPermissionsResult()が受け取れていないことが分かりました。一応パーミッションの許可・不許可はとれているようですが(Android->アプリ->許可 で確認)コールバックがないため、うまく処理を続けることが出来ません。
AndroidのActivityやFragmentは勉強不足ですがよろしくお願いします。不足な点があれば補足します。
###該当のソースコード
c#
1//Unity側 2using UnityEngine; 3using UnityEngine.UI; 4 5public class AndroidDialogTest : MonoBehaviour { 6 7 void Start () { 8 } 9 10 // Buttonイベントで呼ばれる 11 public void OnButton() 12 { 13 callDialog(); 14 } 15 16 private void callDialog() 17 { 18#if UNITY_ANDROID 19 //プラグインのクラスにアクセスするには AndroidJavaClass を使用します 20 // Javaのオブジェクトを作成 引数には[作成したクラスのパッケージ名.クラス名]を与えます 21 AndroidJavaClass nativeDialog = new AndroidJavaClass("com.uni.uni.mylibrary.NativeDialog"); 22 23 // Context(Activity)オブジェクトを取得する 24 AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 25 AndroidJavaObject context = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); 26 27 // AndroidのUIスレッドで動かす 28 context.Call("runOnUiThread", new AndroidJavaRunnable(() => { 29 30 // ダイアログ表示のstaticメソッドを呼び出す 31 nativeDialog.CallStatic( 32 "CheckPermissions", 33 context 34 ); 35 })); 36 #endif 37 }
java
1//Android Studio側 2package com.uni.uni.mylibrary; 3 4import android.os.Build; 5import android.Manifest; 6import android.annotation.TargetApi; 7import android.app.Activity; 8import android.app.AlertDialog; 9import android.app.Fragment; 10import android.content.DialogInterface; 11import android.content.pm.PackageManager; 12 13import android.telephony.TelephonyManager; 14import android.util.Log; 15import android.widget.Toast; 16 17 18public class NativeDialog extends Fragment { 19 20 public static int PERMISSIONS_REQUEST_READ_PHONE_STATE = 1; 21 22 //Unityから呼ばれる 23 static public void CheckPermissions(Activity ac) { 24 Log.w("test","start"); 25 NativeDialog nd=new NativeDialog(); 26 27 // Android 6, API 23以上でパーミッシンの確認 28 if (Build.VERSION.SDK_INT >= 23) { 29 nd.check(ac); //23以上の処理 30 } else { //Android 6未満 31 } 32 33 } 34 35 @TargetApi(Build.VERSION_CODES.M) 36 private void check(final Activity activ) { 37 Log.w("test","check"); 38 //まずパーミッションが許可されているかチェック 39 if (activ.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { 40 //許可されている 41 Log.w("test","check_ok"); 42 } else { 43 //許可されていない 44 Log.w("test","check_no"); 45 //「今後は確認しない」のチェックがされたかどうかを確認 2度目以降のパーミッション要求ダイアログを出すときのみ True 46 if (activ.shouldShowRequestPermissionRationale(Manifest.permission.READ_PHONE_STATE)) { 47 Log.w("test","shouldShowRequestPermissionRationale true"); 48 new AlertDialog.Builder(activ) 49 .setTitle("端末情報の取得許可") 50 .setMessage("このアプリではユーザーの識別に端末情報を使用します") 51 .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 52 @Override 53 public void onClick(DialogInterface dialog, int which) { 54 activ.requestPermissions( new String[]{Manifest.permission. 55 READ_PHONE_STATE},PERMISSIONS_REQUEST_READ_PHONE_STATE);}}) 56 .create() 57 .show(); 58 59 60 } else { 61 //ユーザーが過去に「今後は確認しない(継続的に不許可)」を選んでる または パーミッション要求ダイアログ(初回)表示 62 //「今後は確認しない」のチェックがされた後は、 requestPermissions を呼んでもパーミッション要求ダイアログが表示されない 63 Log.w("test","shouldShowRequestPermissionRationale false"); 64 // パーミッションの許可要求ダイアログを表示 65 activ.requestPermissions( new String[]{Manifest.permission.READ_PHONE_STATE}, 66 PERMISSIONS_REQUEST_READ_PHONE_STATE); 67 } 68 } 69 70 71 72 } 73 74 75 76 //リクエスト結果を受け取る 77 @Override 78 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 79 Log.w("test","onRequestPermissionsResult"); 80 81 if (NativeDialog.PERMISSIONS_REQUEST_READ_PHONE_STATE == requestCode) { 82 //grantResults[0] : 許可の場合0 不許可の場合-1 83 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 84 // 許可された 85 Log.w("test","許可された"); 86 } else { 87 // 許可されなかった 88 Log.w("test","許可されなかった"); 89 } 90 } 91 } 92 93 94} 95 96
###試したこと
こちらを参考にして、Android Studio側コードのクラスにAppCompatActivityを継承させ、requestPermissions()をActivityCompat.requestPermissions(activity, new (略 ))とした場合はプラグインが全く呼び出されませんでした。
Fragmentを継承させた場合で単純なrequestPermissions()としたときはrequestPermissions()が呼ばれませんでした。(プラグインは呼ばれているっぽい)
また両継承のlogcatにそれらしいエラーはありませんでした。(見逃しているかもしれません)
UnityPlayerActivityを継承してactiv.requestPermissions ( new 略 としたら確認ダイアログの表示を出すことができましたがコールバックは受け取れませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Unity5.5.0
AndroidStudio2.1

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/20 01:13