如何在Nativescript中使用startActivityForResult [英] how to use startActivityForResult in Nativescript
问题描述
我使用 扩展活动在我的旧项目中,我想使用 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 吗?
使用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.AppCompatActivity
从android.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屋!