トップページ > 記事閲覧
JNIについてのご質問
名前:海海月 日時: 2017/10/21 16:54

先日は、エミュレータ起動の件で誠にお手数おかけいたしました。 また、わからない点が出たのでご質問させてください。 開発しているアプリケーションから、ブラウザをURL指定で起動する処理を作ろうとしています。 (Androidアプリからのブラウザ起動の方法がJava経由の物しか検索できなかったため、Java経由で作ってます) 以下、「 Androidアプリで Java のコードを実行する」を参考に、JavaソースでJNIを利用しブラウザが 起動するところまでは確認できました。 ■ C側呼び出し部  javaMethod = pEnv->GetMethodID(javaClass, "runBrowser", "()V");  pEnv->CallVoidMethod(pNativeActivity->clazz, javaMethod); ■ Java側  public void runBrowser()  {   String httpPath = "URLを記載";   Uri uri = Uri.parse(httpPath);   Intent i = new Intent(Intent.ACTION_VIEW,uri);   startActivity(i);  } 上記をもとに、URLを引数として渡そうと思い、以下のように改造を行い、以下のように改造しました。 ■ C側呼び出し部  javaMethod = pEnv->GetMethodID(javaClass, "runBrowser", "(Ljava/lang/String;)V");  pEnv->CallObjectMethod(pNativeActivity->clazz, javaMethod, pEnv->NewStringUTF("URLを記載")); ■ Java側  public void runBrowser(String httpPath)  {   Uri uri = Uri.parse(httpPath);   Intent i = new Intent(Intent.ACTION_VIEW,uri);   startActivity(i);  } 実行した結果、「シンボルが読み込まれていません」というタブが表示され、 「libc.pdb は読み込まれていません」というエラーが発生しました。 解決方法、または調べる糸口などをご教授いただければと思い、書き込みました。 よろしくお願いいたします。
メンテ

Page: 1 |

Re: JNIについてのご質問 ( No.1 )
名前:管理人 日時:2017/10/21 19:17

> pEnv->CallObjectMethod(pNativeActivity->clazz, javaMethod, pEnv->NewStringUTF("URLを記載")); CallObjectMethod を使用されていますが、こちらは戻り値が Object だった場合にしようするものなので、  pEnv->CallVoidMethod(pNativeActivity->clazz, javaMethod, pEnv->NewStringUTF("URLを記載")); と、CallVoidMethod を使用するようにすれば正常に動作すると思います よろしければお試しください
メンテ
Re: JNIについてのご質問 ( No.2 )
名前:海海月 日時:2017/10/21 19:48

> CallObjectMethod を使用されていますが、こちらは戻り値が Object だった場合にしようするものなので、 >  pEnv->CallVoidMethod(pNativeActivity->clazz, javaMethod, pEnv->NewStringUTF("URLを記載")); > と、CallVoidMethod を使用するようにすれば正常に動作すると思います > よろしければお試しください なるほど、methodを呼ぶ側にも幾つか種類があったのですね。 上記に変更した場合、ブラウザ起動に成功しました。 上記のような、ほかアプリ起動時の動作について確認なのですが ほかアプリの処理終了時、起動元のアプリを呼び出し前のところに戻すことは可能でしょうか? ユーザ操作で、Androidの□ボタン(プロセス一覧?)から選択した場合、処理が止まっているような 感じになっているので、確認させていただきました。 もとのアプリに戻れない場合、アプリ終了する旨をユーザに通知しようと思います。
メンテ
Re: JNIについてのご質問 ( No.3 )
名前:管理人 日時:2017/10/22 01:11

> 上記のような、ほかアプリ起動時の動作について確認なのですが > ほかアプリの処理終了時、起動元のアプリを呼び出し前のところに戻すことは可能でしょうか? ブラウザで戻るボタンを押したり、□ボタンで元のアプリを選択すれば起動元のアプリに戻ります > ユーザ操作で、Androidの□ボタン(プロセス一覧?)から選択した場合、処理が止まっているような > 感じになっているので、確認させていただきました。 私が試した限りでは□ボタンから選択しても処理は止まりませんでした
メンテ
Re: JNIについてのご質問 ( No.4 )
名前:海海月 日時:2017/10/22 14:09

ご確認ありがとうございます。 再度コチラでも確認してみたのですが、SetAlwaysRunFlag(TRUE)で、常にアクティブ状態にした場合に 上記の、元アプリに戻らない感じでした。プロセスが固まっているのかと思いしばらく放置すると、 アプリケーションが再起動し、初期画面に戻るような動作となりました。 SetAlwaysRunFlag(FALSE)の場合、自分の環境でも元アプリに問題なく戻ることは確認できました。
メンテ
Re: JNIについてのご質問 ( No.5 )
名前:管理人 日時:2017/10/24 00:29

私の環境で SetAlwaysRunFlag( TRUE ) ; を実行した状態で試したところ、エミュレーター環境では 問題なく元のアプリに戻り、実機のスマフォでは元のアプリが再起動してしまいました 詳しくは分かりませんが、実機のスマフォはアプリの動作に伴って発生する熱や電力の消費が 端末の動作に関わる重要な要素なので、非アクティブになっても動作し続けているアプリは 優先的に強制終了されてしまうのかもしれません ( SetAlwaysRunFlag( FALSE ) ; の状態では非アクティブになった瞬間にほぼ動作しなくなるので  強制終了を見逃してもらえる…? ) なので、申し訳ありませんが SetAlwaysRunFlag( TRUE ) ; を実行した状態でブラウザを起動される場合は 『元のアプリに戻れない』という前提で対応してください m(_ _;m
メンテ
Re: JNIについてのご質問 ( No.6 )
名前:海海月(解決) 日時:2017/10/25 01:08

> なので、申し訳ありませんが SetAlwaysRunFlag( TRUE ) ; を実行した状態でブラウザを起動される場合は > 『元のアプリに戻れない』という前提で対応してください m(_ _;m 了解しました。 いろいろとお調べ頂きありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存