Convert Intents to argv
| 105 | |
| 106 | // Convert Intents to argv |
| 107 | std::vector<std::string> get_args(android_app &app, const char *intent_extra_data_key) { |
| 108 | std::vector<std::string> args; |
| 109 | JavaVM &vm = *app.activity->vm; |
| 110 | JNIEnv *p_env; |
| 111 | if (vm.AttachCurrentThread(&p_env, nullptr) != JNI_OK) return args; |
| 112 | |
| 113 | JNIEnv &env = *p_env; |
| 114 | jobject activity = app.activity->clazz; |
| 115 | jmethodID get_intent_method = env.GetMethodID(env.GetObjectClass(activity), "getIntent", "()Landroid/content/Intent;"); |
| 116 | jobject intent = env.CallObjectMethod(activity, get_intent_method); |
| 117 | jmethodID get_string_extra_method = |
| 118 | env.GetMethodID(env.GetObjectClass(intent), "getStringExtra", "(Ljava/lang/String;)Ljava/lang/String;"); |
| 119 | jvalue get_string_extra_args; |
| 120 | get_string_extra_args.l = env.NewStringUTF(intent_extra_data_key); |
| 121 | jstring extra_str = static_cast<jstring>(env.CallObjectMethodA(intent, get_string_extra_method, &get_string_extra_args)); |
| 122 | |
| 123 | std::string args_str; |
| 124 | if (extra_str) { |
| 125 | const char *extra_utf = env.GetStringUTFChars(extra_str, nullptr); |
| 126 | args_str = extra_utf; |
| 127 | env.ReleaseStringUTFChars(extra_str, extra_utf); |
| 128 | env.DeleteLocalRef(extra_str); |
| 129 | } |
| 130 | |
| 131 | env.DeleteLocalRef(get_string_extra_args.l); |
| 132 | env.DeleteLocalRef(intent); |
| 133 | vm.DetachCurrentThread(); |
| 134 | |
| 135 | // split args_str |
| 136 | std::stringstream ss(args_str); |
| 137 | std::string arg; |
| 138 | while (std::getline(ss, arg, ' ')) { |
| 139 | if (!arg.empty()) args.push_back(arg); |
| 140 | } |
| 141 | |
| 142 | return args; |
| 143 | } |
| 144 | |
| 145 | static int32_t processInput(struct android_app *app, AInputEvent *event) { |
| 146 | (void)app; |