Мне нужно, чтобы в моем приложении для видеозвонков отображался экран, даже если экран заблокирован. Я использовал этот очень хороший учебник , чтобы добиться этого, и он работает, пробуждение экрана, когда пользователь получает вызов.
Но моя проблема в том, что этот экран очень медленный, он занимает 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
работать, это будет здорово.