我使用扩展了我旧项目中的活动,并且我想在publiconCreate((函数中使用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 );
上面的代码在publiconCreate((函数中。
但当我升级所有的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再次工作,那么一切都可以。
My 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-活性
使用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)
更新
我创建应用的步骤
代码
android.support.v7.app.AppCompatActivity
从android.support.v4.app.FragmentActivity
扩展而来。
因此,如果要使用AppCompatActivity,则应同时包含v4-compat库和v7 compat库
我认为由于核心模块最近的更改,您的活动变量将在create回调中未定义。
尝试超时或使用this
,如
this.startActivityForResult(intent, this.MY_PERMISSION_REQUEST );
我也遇到过类似的问题。我在这里发布了它:
https://github.com/NativeScript/NativeScript/issues/7442
我设法解决了这个问题,不再使用变量,或者至少使用类范围的变量。我假设在JavaScript和Java之间的转换中,这些都丢失了。
该问题突出显示的变化是:
this.startActivityForResult(intent, this.REQUEST_CODE_SET_DEFAULT_DIALER);
其中this.REQUEST_CODE_SET_DEFAULT_DIALER
是123
我现在用这个代替
this.startActivityForResult(intent, 123);
我注意到您可以使用局部变量(非this
(,但在类上使用该变量会导致问题。