当我收到无声通知时,我需要调用反应本机屏幕,目前我正在试验电话状态,我使用 PhoneStateListenr 类来触发名为 MyActivity 的第二个活动,并在其中运行 React Native 代码。
运行 MyActivity 类时出现以下错误,即指出当前活动属于不正确的类,
java.lang.IllegalStateException: Current Activity is of incorrect class, expected AppCompatActivity, received MyActivity
MyActivity 在电话状态下触发,
package com.apartmentapp;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class PhoneStateListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
final Context ctx;
ctx = context;
final Intent intnt = new Intent(context, MyActivity.class);
intnt.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intnt.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intnt.putExtra("phone_no", "9876543210");
intnt.putExtra("contact_name", "Test User");
intnt.putExtra("id", "1234");
ctx.startActivity(intnt);
} catch (Exception e) {
e.printStackTrace();
}
}
}
下面是我的ActivityClass
package com.apartmentapp;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import com.facebook.hermes.reactexecutor.HermesExecutorFactory;
import com.facebook.react.BuildConfig;
import com.facebook.react.PackageList;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactPackage;
import com.facebook.react.ReactRootView;
import com.facebook.react.common.LifecycleState;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.soloader.SoLoader;
import java.util.List;
public class MyActivity extends Activity implements DefaultHardwareBackBtnHandler {
private Window wind;
private ReactRootView mReactRootView;
private ReactInstanceManager mReactInstanceManager;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.setFinishOnTouchOutside(true);
super.onCreate(savedInstanceState);
SoLoader.init(this, false);
mReactRootView = new ReactRootView(this);
List<ReactPackage> packages = new PackageList(getApplication()).getPackages();
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setCurrentActivity(this)
.setBundleAssetName("index.android.bundle")
.setJSMainModulePath("index")
.addPackages(packages)
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.setJavaScriptExecutorFactory(new HermesExecutorFactory())
.build();
mReactRootView.startReactApplication(mReactInstanceManager, "AlertPopupFragment", null);
setContentView(mReactRootView);
setContentView(R.layout.dialog);
FrameLayout alertPopUpFragment = findViewById(R.id.alertPopUpFragment);
alertPopUpFragment.addView(mReactRootView);
}
private Bundle getLaunchOptions(String message) {
Bundle initialProperties = new Bundle();
initialProperties.putString("message", message);
return initialProperties;
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
wind = this.getWindow();
wind.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
wind.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
wind.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
wind.addFlags(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
wind.addFlags(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
}
@Override
public void invokeDefaultOnBackPressed() {
}
}
我也尝试通过将MyActivity设置为MainActivity来解决它,
这里是 Android Manifest 文件中定义的 MyActivity
<activity
android:name=".MyActivity"
android:noHistory="true"
android:taskAffinity=".MyActivity"
android:theme="@style/MyActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
请提供解决方案
错误很清楚问题是什么以及如何解决:
Current Activity is of incorrect class, expected AppCompatActivity, received MyActivity
目前你的定义是
MyActivity extends Activity
,但是react Native似乎需要将其更改为MyActivity extends AppCompatActivity
。
AppCompatActivity
的完整类名很可能是androidx.appcompat.app.AppCompatActivity。因此,您必须在 Java 文件的开头添加导入:
import androidx.appcompat.app.AppCompatActivity;