как использовать startActivityForResult в Nativescript

Я использую расширенное действие в моем старом проекте, и я хочу использовать startActivityForResult () в функции public onCreate ().

Однако я не знаю, как исправить ошибку.

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 до версии 5.0.0 и библиотеки Android до версии 28.

и обновите код из

class MainActivity extends android.app.Activity {

to

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?


Обновить

код взят из https://docs.nativescript.org/core-concepts/android-runtime/advanced-topics/extend-application-activity#exnding-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)

Обновить

мои шаги по созданию приложения

код


person user10655801    schedule 15.11.2018    source источник
comment
опубликуйте свой полный код, чтобы узнать причину ошибки   -  person Farrokh    schedule 15.11.2018
comment
похоже, что ваша целевая активность использует активность фрагментов.   -  person karan    schedule 15.11.2018
comment
хорошо, теперь я добавил шаги и код.   -  person user10655801    schedule 20.11.2018
comment
Спасибо за последнее обновление. Я не мог найти, как начать деятельность. Я резюмировал решение в этом ответе. Спасибо за тестовое репо.   -  person belvederef    schedule 16.11.2019


Ответы (3)


android.support.v7.app.AppCompatActivity простирается от android.support.v4.app.FragmentActivity.

поэтому, если вы хотите использовать AppCompatActivity, вы должны включить как библиотеку совместимости v4, так и библиотеку совместимости v7.

person navylover    schedule 15.11.2018
comment
Я скопировал код из docs .nativescript.org / core-concepts / android-runtime / TYPESCRIPT `` `` Активность класса @JavaProxy (org.myApp.MainActivity) расширяет android.support.v7.app.AppCompatActivity {`` `` как мне импортировать android.support.v4.app.FragmentActivity здесь? - person user10655801; 15.11.2018

Я думаю, что из-за недавних изменений в основных модулях ваша переменная активности будет неопределенной внутри обратного вызова create.

Попробуйте установить тайм-аут или используйте вместо него this, например

  this.startActivityForResult(intent, this.MY_PERMISSION_REQUEST );
person Manoj    schedule 15.11.2018
comment
та же ошибка Ошибка: java.lang.Exception: не удалось разрешить метод startActivityForResult в классе android.support.v4.app.FragmentActivity при использовании this - person user10655801; 15.11.2018
comment
Как попробовать тайм-аут? Я не понимаю. - person user10655801; 15.11.2018
comment
Предположим, что это AppCompatActivity, есть ли у вас репо с образцом проекта, чтобы мы могли быстро взглянуть на него. - person Manoj; 15.11.2018

У меня была аналогичная проблема. Я писал об этом здесь:

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), но использование переменной в классе вызывает проблемы.

person N.J.Dawson    schedule 09.07.2019