質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

Unity内でのonRequestPermissionsResultコールバックが受け取れない

aiueoao
aiueoao

総合スコア146

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1回答

0グッド

0クリップ

4209閲覧

投稿2017/03/03 15:07

編集2017/03/04 08:38

###前提・実現したいこと
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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

自己解決

こちらを参考にしてコールバックが受け取れました

投稿2017/03/06 11:41

aiueoao

総合スコア146

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

mmoffice

2021/08/20 01:13

同様の事象で困っております。上記はリンク切れで解決策がわかりません。 どのように対処されたかご教示いただけると幸いです。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。