【问题标题】:how to use startActivityForResult in Nativescript如何在 Nativescript 中使用 startActivityForResult
【发布时间】:2018-11-15 07:02:09
【问题描述】:

我用一个 extended activity 在我的旧项目中,我想在 public onCreate() 函数中使用 startActivityForResult()

但是我不知道如何解决这个错误

System.err: Caused by: java.lang.Exception: Failed resolving method startActivityForResult on class android.support.v4.app.FragmentActivity

代码没问题。

activity.startActivityForResult( intent, this.MY_PERMISSION_REQUEST );

以上代码在 public onCreate() 函数中。

但是当我升级所有 npm 包时,包括将 android 平台更新到 v5.0.0 并将 android 库更新到 v28。

并从

更新代码
class MainActivity extends android.app.Activity {

class MainActivity extends android.support.v7.app.AppCompatActivity { 

旧代码不再工作了。

System.err: Caused by: java.lang.Exception: Failed resolving method startActivityForResult on class android.support.v4.app.FragmentActivity

我认为可能与 startActivityForResult() 有关。

我是 nativescript 和 android 的新手。

如何在我的扩展活动中正确使用此功能?

我想得到这个答案。

但如果有其他解决方法也很好。

例如,我尝试使用旧代码返回

class MainActivity extends android.app.Activity {

上面那个,但是不行。

System.err: com.tns.NativeScriptException: 
System.err: Calling js method onViewAttachedToWindow failed
System.err: 
System.err: TypeError: this._context.getSupportFragmentManager is not a function
System.err: File: "file:///data/data/com.testapp/files/app/tns_modules/tns-core-modules/ui/core/view/view.js, line: 190, column: 46
System.err: 
System.err: StackTrace: 
System.err:   Frame: function:'View._getRootFragmentManager', file:'file:///data/data/com.testapp/files/app/tns_modules/tns-core-modules/ui/core/view/view.js', line: 190, column: 47
System.err:   Frame: function:'View._getFragmentManager', file:'file:///data/data/com.testapp/files/app/tns_modules/tns-core-modules/ui/core/view/view.js', line: 215, column: 32
System.err:   Frame: function:'Frame._processNextNavigationEntry', file:'file:///data/data/com.testapp/files/app/tns_modules/tns-core-modules/ui/frame/frame.js', line: 134, column: 28
System.err:   Frame: function:'Frame._onAttachedToWindow', file:'file:///data/data/com.testapp/files/app/tns_modules/tns-core-modules/ui/frame/frame.js', line: 118, column: 14
System.err:   Frame: function:'AttachListener.onViewAttachedToWindow', file:'file:///data/data/com.testapp/files/app/tns_modules/tns-core-modules/ui/frame/frame.js', line: 35, column: 27
System.err:

如果有什么方法可以让代码startActivityForResult再次工作就OK了。

我的 AndroidManifest.xml 包含

android:minSdkVersion="21"
android:targetSdkVersion="23"

这是否意味着所有设备 >= 21 都将被接受,

android.support.v7.app.AppCompatActivity

文档显示在 25.1.0 版中添加

我是否也需要更新我的 AndroidManifest.xml


更新

代码来自https://docs.nativescript.org/core-concepts/android-runtime/advanced-topics/extend-application-activity#extending-activity

使用 TYPESCRIPT

@JavaProxy("org.myApp.MainActivity")
class Activity extends android.support.v7.app.AppCompatActivity {
    private _callbacks: AndroidActivityCallbacks;
    public readonly MY_PERMISSION_REQUEST = 100;

    public onCreate(savedInstanceState: android.os.Bundle): void {
        if (!this._callbacks) {
            setActivityCallbacks(this);
        }

        this._callbacks.onCreate(this, savedInstanceState, super.onCreate);

        let intent: android.content.Intent = new android.content.Intent( ( <any> android.provider.Settings ).ACTION_HOME_SETTINGS );
        intent.setData( Uri.parse( "package:" + context.getPackageName() ) );
        let activity = app.android.foregroundActivity || app.android.startActivity;
        activity.startActivityForResult( intent, this.MY_PERMISSION_REQUEST );
    }

几乎都一样,但为 startActivityForResult 添加一些代码。

如果删除 startActivityForResult 行,一切都会再次正常运行。


更新###

使用 this.startActivityForResult()

时出现同样的错误
System.err: Calling js method onCreate failed
System.err: 
System.err: Error: java.lang.Exception: Failed resolving method startActivityForResult on class android.support.v4.app.FragmentActivity
System.err:     com.tns.Runtime.resolveMethodOverload(Runtime.java:1075)
System.err:     com.tns.Runtime.callJSMethodNative(Native Method)
System.err:     com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1116)
System.err:     com.tns.Runtime.callJSMethodImpl(Runtime.java:996)
System.err:     com.tns.Runtime.callJSMethod(Runtime.java:983)
System.err:     com.tns.Runtime.callJSMethod(Runtime.java:967)
System.err:     com.tns.Runtime.callJSMethod(Runtime.java:959)
System.err:     com.testapp.MainActivity.onCreate(MainActivity.java:18)
System.err:     android.app.Activity.performCreate(Activity.java:7009)
System.err:     android.app.Activity.performCreate(Activity.java:7000)

更新

my steps to creating the app

the code

【问题讨论】:

  • 发布您的完整代码以检查错误原因
  • 看起来您的目标活动正在使用片段活动。
  • 好的,我现在添加了步骤和代码。
  • 感谢您的最后更新。我找不到如何开始活动。我在this answer中总结了解决方案。感谢您的测试回购。

标签: android nativescript startactivityforresult


【解决方案1】:

android.support.v7.app.AppCompatActivity 扩展自 android.support.v4.app.FragmentActivity

所以如果你想使用 AppCompatActivity,你应该同时包含 v4 兼容库v7 兼容库

【讨论】:

【解决方案2】:

我认为由于最近核心模块的变化,您的活动变量将在创建回调中未定义。

尝试超时或改用this,例如

  this.startActivityForResult(intent, this.MY_PERMISSION_REQUEST );

【讨论】:

  • 同样的错误 错误:java.lang.Exception:使用 this 类 android.support.v4.app.FragmentActivity 的解析方法 startActivityForResult 失败
  • 如何尝试超时?我不明白。
  • 应该是AppCompatActivity,你有没有示例项目的repo,我们可以快速浏览一下。
【解决方案3】:

我遇到了类似的问题。我在这里发布了它:

https://github.com/NativeScript/NativeScript/issues/7442

我设法解决了这个问题,不再使用变量,或者至少是类范围的变量。我假设在 JavaScript 和 Java 之间的转换中这些都丢失了。

从该问题突出显示的更改是:

this.startActivityForResult(intent, this.REQUEST_CODE_SET_DEFAULT_DIALER);

其中this.REQUEST_CODE_SET_DEFAULT_DIALER123

我现在有了这个

this.startActivityForResult(intent, 123);

我注意到您可以使用局部变量(非this),但在类上使用变量会导致问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 2012-08-27
    • 2018-08-19
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 2015-10-29
    相关资源
    最近更新 更多