颤动:意图

Ben*_*esi 7 android android-intent flutter

我尝试从我的 Flutter/Android 项目调用 Intent 请求。\n如上所述,应该按如下方式完成

\n
Intent intent = \xe2\x80\x8bnew \xe2\x80\x8bIntent();\nintent.setComponent(\xe2\x80\x8bnew \xe2\x80\x8bComponentName(\xe2\x80\x8b"sk.co.xxx.yyy"\xe2\x80\x8b, "sk.co.xxx.yyy.MainActivity"\xe2\x80\x8b));\nJSONObject jReq = \xe2\x80\x8bnew \xe2\x80\x8bJSONObject();\nString sReq=\xe2\x80\x8b""\xe2\x80\x8b;\njReq.put(\xe2\x80\x8b"Amount"\xe2\x80\x8b,\xe2\x80\x8b<Amount>\xe2\x80\x8b); \njReq.put(\xe2\x80\x8b"Operation"\xe2\x80\x8b,\xe2\x80\x8b<Operation>\xe2\x80\x8b);\njReq.put(\xe2\x80\x8b"TransactionID"\xe2\x80\x8b,<can be generated e.g.getRandom()>); \nsReq = jReq.toString();\n\nif\xe2\x80\x8b(sReq.isEmpty())\xe2\x80\x8breturn\xe2\x80\x8b; \nintent.putExtra(\xe2\x80\x8b"POS_EMULATOR_EXTRA"\xe2\x80\x8b, sReq); try \xe2\x80\x8b{\nstartActivityForResult(intent, \xe2\x80\x8b<requestCode>\xe2\x80\x8b); }\n
Run Code Online (Sandbox Code Playgroud)\n

如何在 Flutter 下实现此代码?\n我尝试使用 flutter.dev 中的 android_intent 包,但收到以下错误消息:

\n
E/MethodChannel#plugins.flutter.io/android_intent(22815): Failed to handle method call\nE/MethodChannel#plugins.flutter.io/android_intent(22815): android.content.ActivityNotFoundException: No Activity found to handle Intent \n
Run Code Online (Sandbox Code Playgroud)\n

感谢您的任何答复!

\n

我的 Flutter 代码替换上面的代码是:

\n
if (Platform.isAndroid) {\n    Map data = {\n      "Amount": "$amount",\n      "Operation": "$operation"\n    };\n  AndroidIntent intent = AndroidIntent(\n    componentName: "sk.co.xxx.yyy"\xe2\x80\x8b,\n    data: data.toString()\n  );\n  await intent.launch();\n
Run Code Online (Sandbox Code Playgroud)\n

我看到,“MainActivity”和 putExtra(\xe2\x80\x8b"POS_EMULATOR_EXTRA" 不在我的 Flutter 代码中,但我现在不知道,我该如何实现......

\n

Mar*_*ler 0

实际的答案可以在 中找到AndroidManifest.xml,因为ActivityNotFoundException可以相当字面地理解......这意味着 Java 包或类名无法解析。

String packageName = getApplicationContext().getPackageName(); // just for example
String className = packageName + ".SomeActivity";              // just for example
Intent intent = new Intent(Intent.ACTION_MAIN);                // just for example
intent.setComponent(new ComponentName(packageName, className));

try {
   startActivity(intent);
} catch (ActivityNotFoundException e) {
    Log.e(LOG_TAG, e.getMessage());

    // in here one still could perform a fall-back operation
}
Run Code Online (Sandbox Code Playgroud)

Activity要解决的问题也必须android:exported="true"声明。使用/
并没有错trycatch,特别是当它不是自己的包时。

关键部分是intent-filter元素;当不匹配时,无论是否Activity存在并导出,它都不会解析 - 这一切都基于意图过滤器的工作方式。