android - 如何在 Nativescript 中使用 startActivityForResult
问题描述
我在旧项目中使用了 扩展活动,我想在公共 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 );
上面的代码在公共 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再次工作就可以了。
我的 AndroidManifest.xml 包含
android:minSdkVersion="21"
android:targetSdkVersion="23"
这是否意味着所有设备 >= 21 都将被接受,
android.support.v7.app.AppCompatActivity
该文档显示在 25.1.0 版中添加
我也需要更新我的AndroidManifest.xml吗?
更新
使用 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,一切都会再次正常。
更新 ###
使用此.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 兼容库和v7 兼容库。
推荐阅读
- java - 将 Map 的每个条目集转换为另一个自定义对象
- php - 用数组理解 foreach
- python - TF-IDF 向量与标记向量
- react-native - React Native 导航重置不起作用
- typescript - 基于参数类型的类方法返回类型
- c - 在 C 中打印浮点数始终为 0,即使存在应该替换该 0 的值
- java - 如何在本地主机上启用 Spring 和 Angular 2 之间的 CORS
- javascript - 如何将计时器添加到 jquery 加载 div?
- packer - 无法更改 Packer amazon-ebs 中的脚本路径
- docker - 在 .net 核心应用程序中将 GCP 凭据添加到 docker