Ionic 将OnActivityResult数据从电容器传回混合应用程序

jhkqcmku  于 2024-01-04  发布在  Ionic
关注(0)|答案(2)|浏览(155)

我正在开发一个Compacitor混合应用程序。我试图按照此页面中的说明操作:https://capacitor.ionicframework.com/docs/plugins/android,以启动ActivityForResult(从混合JavaScript部分),在本地secondActivity中做一些事情并将结果返回到混合部分。这里是其他地方问的类似问题没有答案!https://github.com/ionic-team/capacitor/issues/1044这是关于我的应用程序的简要描述:一个离子空白应用程序+电容器:这是我家的代码.page.ts

  1. import {Component} from '@angular/core';
  2. import {Plugins} from '@capacitor/core';
  3. //typeface
  4. declare global {
  5. interface PluginRegistry {
  6. PluginTest2 ? : PluginTest2;
  7. }
  8. }
  9. interface PluginTest2 {
  10. goToActivity(): Promise < any > ;
  11. }
  12. @Component({
  13. selector: 'app-home',
  14. templateUrl: 'home.page.html',
  15. styleUrls: ['home.page.scss'],
  16. })
  17. export class HomePage {
  18. goToSecondActivity() {
  19. const {PluginTest2} = Plugins;
  20. PluginTest2.goToActivity().then((result) => {
  21. // I want data from SecondActivity back here and log it!
  22. console.log(result);
  23. })
  24. }
  25. }

字符串
而home.page.html只是一个按钮,用来激活goToSecondActivity();方法。在android studio中打开capacitor项目后,我添加了这个类:

  1. package com.alihaghighicapacitor.qom;
  2. import android.content.Intent;
  3. import com.getcapacitor.JSObject;
  4. import com.getcapacitor.NativePlugin;
  5. import com.getcapacitor.Plugin;
  6. import com.getcapacitor.PluginCall;
  7. import com.getcapacitor.PluginMethod;
  8. @NativePlugin()
  9. public class PluginTest2 extends Plugin {
  10. @PluginMethod()
  11. public void goToActivity(PluginCall call) {
  12. Intent intent = new Intent(getActivity().getApplicationContext(), secondActivity.class);
  13. startActivityForResult(call, intent, 1);
  14. // I can return this sillyData! back to "home.page.ts" but I want data from seconfActivity not this class
  15. JSObject ret = new JSObject();
  16. ret.put("added", "sillyData!");
  17. call.success(ret);
  18. }
  19. @Override
  20. protected void handleOnActivityResult(int requestCode, int resultCode, Intent data) {
  21. super.handleOnActivityResult(requestCode, resultCode, data);
  22. String recievedMessage = data.getStringExtra("Data");
  23. // capacitor team tutorial in the page I mentioned earlier instructs to use PluginCall as follows but IT DOES NOT WORK FOR ME!
  24. PluginCall savedCall = getSavedCall();
  25. if (savedCall == null) {
  26. return;
  27. }
  28. if (requestCode == REQUEST_IMAGE_PICK) {
  29. // Do something with the data
  30. }
  31. }
  32. }


这里是secondActivity.java:

  1. package com.alihaghighicapacitor.qom;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.EditText;
  8. public class secondActivity extends AppCompatActivity {
  9. EditText editText;
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_second);
  14. editText = findViewById(R.id.editText);
  15. }
  16. public void sendMeHome(View view) {
  17. Intent intent = new Intent();
  18. String message = editText.getText().toString();
  19. intent.putExtra("Data", message);
  20. finish();
  21. }
  22. }


和activity_second.xml的相关部分

  1. <Button android:id="@+id/button"
  2. android:onClick="sendMeHome"/>
  3. <EditText android:id="@+id/editText"/>
  4. //clicking the button should get the editText value and send it back to
  5. => previous activity => to home.page.ts => and log it


这段代码会触发secondActivity,但在本机部分中没有接收到数据,除了我在上面的代码中注解的sillyData!如果anyBody可以帮助,它将对我有很大的帮助。MAinActivity.java

  1. package com.alihaghighicapacitor.qom;
  2. import com.alihaghighicapacitor.qom.PluginTest2;
  3. import android.os.Bundle;
  4. import com.getcapacitor.BridgeActivity;
  5. import com.getcapacitor.Plugin;
  6. import java.util.ArrayList;
  7. public class MainActivity extends BridgeActivity {
  8. @Override
  9. public void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. // Initializes the Bridge
  12. this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
  13. // Additional plugins you've installed go here
  14. // Ex: add(TotallyAwesomePlugin.class);
  15. add(PluginTest2.class);
  16. }});
  17. }
  18. }

lzfw57am

lzfw57am1#

要调用handleOnActivityResult(),您需要向@NativePlugin注册Intent请求代码。

  1. @NativePlugin(
  2. requestCodes={MyPlugin.REQUEST_IMAGE_PICK}
  3. )

字符串
意图和结果

92vpleto

92vpleto2#

在返回愚蠢的数据之前,你必须用saveCall(call);保存调用,否则savedCall将为null,它将转到空返回,而不是处理返回数据的代码。

相关问题