如何在Nativescript中使用startActivityForResult [英] how to use startActivityForResult in Nativescript

查看:54
本文介绍了如何在Nativescript中使用startActivityForResult的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 扩展活动在我的旧项目中,我想使用 startActivityForResult() public onCreate()函数中.

I use a extended activity in my old project, and I want to use startActivityForResult() in the public onCreate() function.

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

However I don't know how to solve the error

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.

but when I upgraded all the npm packges, including updating android platform to v5.0.0 and android library to 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的新手.

I'm new to nativescript and android.

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

我想得到这个答案.

但是,如果还有其他解决方法,也将很好.

But if there are other workarounds will be good, too.

例如,我尝试使用旧代码

For example, I tried to use old code back

class MainActivity extends android.app.Activity {

以上之一,但不起作用.

the above one, but not work.

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 再次工作,则可以.

If there are any methods to make the code startActivityForResult work again will all be ok.

我的AndroidManifest.xml包含

My AndroidManifest.xml contains

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

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

Does that mean all the devices >= 21 will be accepted,

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

using 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 添加了一些代码.

almost all the same, but add some code for startActivityForResult.

如果删除行 startActivityForResult ,一切都会恢复正常.

if removing the line startActivityForResult, everything works fine again.

相同的错误

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)


更新

我创建应用的步骤


update

my steps to creating the app

代码

推荐答案

android.support.v7.app.AppCompatActivityandroid.support.v4.app.FragmentActivity扩展.

因此,如果要使用AppCompatActivity,则应同时包含 v4兼容库 v7兼容库.

so if you want to use AppCompatActivity, you should include both v4 compat library and v7 compat library.

这篇关于如何在Nativescript中使用startActivityForResult的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆