Активность очень медленно отображается, когда экран заблокирован, и приложение cra sh при вызове requestDismissKeyguard () - PullRequest
3 голосов
/ 20 апреля 2020

Мне нужно, чтобы в моем приложении для видеозвонков отображался экран, даже если экран заблокирован. Я использовал этот очень хороший учебник , чтобы добиться этого, и он работает, пробуждение экрана, когда пользователь получает вызов.

Но моя проблема в том, что этот экран очень медленный, он занимает 4-5 секунд чтобы включить экран, требуется 5 секунд, чтобы ответить, когда я нажимаю кнопку ...

Кроме того, я хочу, чтобы клавиатура была закрыта при нажатии кнопки imageView (вызвать пользовательский интерфейс, чтобы пользователь мог ввести их учетные данные: PIN-код, пароль, шаблон ...), поэтому я использовал requestDismissKeyguard, но приложение вылетает при его вызове.

Я прочитал, что в моем случае лучше использовать службу, а не деятельность, но я не знаю, как преобразовать мою деятельность в службу. Я не очень знаком с android разработкой, поэтому не знаю, откуда возникла проблема.

ReactMethod в ActivityStarterModule. java

@ReactMethod
void showActivity(String text) {

Intent myIntent = new Intent((Application)reactContext.getApplicationContext(), BackgroundCallActivity.class);
        myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Bundle b = new Bundle();
        b.putString("text", text);
        myIntent.putExtras(b);
        ((Application)reactContext.getApplicationContext()).startActivity(myIntent);
    }

Моя активность в AndroidManifest

...
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<activity
        android:name="BackgroundCallActivity"
        android:showOnLockScreen="true"
        android:screenOrientation="sensorPortrait"
/>
...

Вот мой код активности


package com.my_project;

import android.app.Activity;
import android.os.Bundle;
import androidx.annotation.CallSuper;
import androidx.annotation.Nullable;
import android.view.View;
import android.view.WindowManager;
import android.os.Build;
import android.app.KeyguardManager;
import android.content.Context;
import android.widget.TextView;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class BackgroundCallActivity extends Activity {

    TextView textView;

    @Override
    @CallSuper
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.background_call_activity);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1){
            setShowWhenLocked(true);
            setTurnScreenOn(true);
        } else {
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
        }

        Bundle b = getIntent().getExtras();
        String value = b.getString("text");

        textView = (TextView)findViewById(R.id.textView);
        textView.setText(value);

        ImageView imageView = (ImageView)findViewById(R.id.answer);
        final TextView mCustomToast = (TextView)findViewById(R.id.textView2);
                mCustomToast.setVisibility(View.INVISIBLE);

                imageView.setOnTouchListener(new View.OnTouchListener() {

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                    KeyguardManager keyguardManager = (KeyguardManager)
                    getSystemService(Context.KEYGUARD_SERVICE);
                    if( keyguardManager.isKeyguardLocked()) {
                        keyguardManager.requestDismissKeyguard(BackgroundCallActivity.this, null);
                      } else {
                        ActivityStarterModule.triggerAlert("answer");
                        finish();
                    }

                        return false;
                    }
                });

        ImageView imageView1 = (ImageView)findViewById(R.id.hangup);

                imageView1.setOnTouchListener(new View.OnTouchListener() {

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        ActivityStarterModule.triggerAlert("reject");
                        finish();

                        return false;
                    }
                });
    }
}

Есть ли у вас какие-либо предложения, чтобы убрать эту задержку и заставить requestDismissKeyguard работать, это будет здорово.

...