Ben*_*esi 7 android android-intent flutter
我尝试从我的 Flutter/Android 项目调用 Intent 请求。\n如上所述,应该按如下方式完成
\nIntent 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); }\nRun Code Online (Sandbox Code Playgroud)\n如何在 Flutter 下实现此代码?\n我尝试使用 flutter.dev 中的 android_intent 包,但收到以下错误消息:
\nE/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 \nRun Code Online (Sandbox Code Playgroud)\n感谢您的任何答复!
\n我的 Flutter 代码替换上面的代码是:
\nif (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();\nRun Code Online (Sandbox Code Playgroud)\n我看到,“MainActivity”和 putExtra(\xe2\x80\x8b"POS_EMULATOR_EXTRA" 不在我的 Flutter 代码中,但我现在不知道,我该如何实现......
\n实际的答案可以在 中找到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存在并导出,它都不会解析 - 这一切都基于意图过滤器的工作方式。
| 归档时间: |
|
| 查看次数: |
3040 次 |
| 最近记录: |