Android 如何区分屏幕和手机状态广播接收器

Android 如何区分屏幕和手机状态广播接收器,android,broadcastreceiver,lockscreen,phone-state-listener,Android,Broadcastreceiver,Lockscreen,Phone State Listener,我有两个广播节目 一个用于屏幕开/关,另一个用于手机状态。如果屏幕打开,我想向用户显示我的活动,但如果是电话,则不显示 如何处理此问题,如有任何帮助,将不胜感激 您需要使用if/else条件将广播操作标识为: public static final String Screen_on = "android.intent.action.SCREEN_ON"; @Override public void onReceive(Context context, Intent intent) { if (i

我有两个广播节目

一个用于屏幕开/关,另一个用于手机状态。如果屏幕打开,我想向用户显示我的活动,但如果是电话,则不显示


如何处理此问题,如有任何帮助,将不胜感激

您需要使用if/else条件将广播操作标识为:

public static final String Screen_on = "android.intent.action.SCREEN_ON";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Screen_on)) {
   // do your job here if screen is on /off
}
else{
        // send new intent to your Activity here 
         Intent intent = new Intent(context,Activity1.class);
     intent.putExtra("status","CALL_STATE");
     context.startActivity(intent);

        Bundle extras = intent.getExtras();
       if (extras != null) {
        String state = extras.getString(TelephonyManager.EXTRA_STATE);
        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING) {
           // do your job here if PHONE STATE CHNAGED
        }
      }

}
并在
AndroidManifest.xml
中将您的活动声明为
android:launchMode=“singleTask”
并在活动以以下方式运行时重写onNewIntent以接收意图:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    finishactivity();
}
private void finishactivity(){
    Intent intent = getIntent();
    Bundle extras=intent.getExtras();
    if(extras!=null){
          if(extras.getString("status").equals("CALL_STATE"))
         // finish your Activity here
    } 
}

您需要使用if/else条件将广播操作标识为:

public static final String Screen_on = "android.intent.action.SCREEN_ON";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Screen_on)) {
   // do your job here if screen is on /off
}
else{
        // send new intent to your Activity here 
         Intent intent = new Intent(context,Activity1.class);
     intent.putExtra("status","CALL_STATE");
     context.startActivity(intent);

        Bundle extras = intent.getExtras();
       if (extras != null) {
        String state = extras.getString(TelephonyManager.EXTRA_STATE);
        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING) {
           // do your job here if PHONE STATE CHNAGED
        }
      }

}
并在
AndroidManifest.xml
中将您的活动声明为
android:launchMode=“singleTask”
并在活动以以下方式运行时重写onNewIntent以接收意图:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    finishactivity();
}
private void finishactivity(){
    Intent intent = getIntent();
    Bundle extras=intent.getExtras();
    if(extras!=null){
          if(extras.getString("status").equals("CALL_STATE"))
         // finish your Activity here
    } 
}

我试过了,但似乎有个问题,比如首先调用screen_on而不是Phone state,假设我在屏幕上显示了我的活动,然后在收到手机状态接收器后,该活动不应显示。@sandy:作为您的问题,此代码仅在操作广播接收器屏幕上显示时启动活动。@sandy:查看我的编辑答案可能有助于您实现所需功能我尝试了此操作,但似乎出现了类似屏幕上显示的问题首先调用电话状态,假设我在屏幕上显示了我的活动,然后在收到电话状态接收器后,该活动不应显示。@桑迪:作为您的问题,此代码仅在操作广播接收器的屏幕上显示时启动活动。@桑迪:查看我的编辑答案可能有助于您实现所需的功能