广播接收器错误,应该与 13 个广播一起使用

问题描述 投票:0回答:1

mainTest(ru.myitschool.lab23.InstrumentedTestLab46)中的错误: java.lang.RuntimeException: java.lang.Throwable: 'android.widget.TextView 和 view.getText() 的实例,无论是否进行转换以匹配:是“ACTION_ASSIST”' 与所选视图不匹配。 预期: android.widget.TextView 和 view.getText() 的实例,有或没有转换以匹配:是“ACTION_ASSIST” 得到:view.getText()是“android.intent.action.BATTERY_CHANGED”转换后的文本是“android.intent.action.BATTERY_CHANGED” 查看详细信息:MaterialTextView{id=2131231135、res-name=status_text、visibility=VISIBLE、width=1080、height=2105、has-focus=false、has-focusable=false、has-window-focus=true、is-clickable = false,is-enabled = true,is-focused = false,is-focusable = false,is-layout-requested = false,is-selected = false,layout-params = android.widget.LinearLayout$LayoutParams@YYYYYY,标签= null,root-is-layout-requested = false,has-input-connection = false,x = 0.0,y = 0.0,text = android.intent.action.BATTERY_CHANGED,inp ... 在 androidx.test.espresso.base.ThrowableHandler.handle(ThrowableHandler.java:2) 在 androidx.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:5) 在 ru.myitschool.lab23.DescriptionFailureHandler.handle(InstrumentedTestLab46.kt:244) 在 androidx.test.espresso.ViewInteraction.waitForAndHandleInteractionResults(ViewInteraction.java:5) 在 androidx.test.espresso.ViewInteraction.check(ViewInteraction.java:12) 在 io.github.kakaocup.kakao.delegate.ViewInteractionDelegate.check(ViewInteractionDelegate.kt:26) 在 io.github.kakaocup.kakao.text.TextViewAssertions$DefaultImpls.hasText(TextViewAssertions.kt:53) 在 io.github.kakaocup.kakao.text.KTextView.hasText(KTextView.kt:18) 在 ru.myitschool.lab23.InstrumentedTestLab46$mainTestCheckStep$1.invoke(InstrumentedTestLab46.kt:150) 在 ru.myitschool.lab23.InstrumentedTestLab46$mainTestCheckStep$1.invoke(InstrumentedTestLab46.kt:138) 在 io.github.kakaocup.kakao.screen.Screen.invoke(Screen.kt:119) 在 ru.myitschool.lab23.InstrumentedTestLab46.mainTestCheckStep(InstrumentedTestLab46.kt:138) 在 ru.myitschool.lab23.InstrumentedTestLab46.mainTest(InstrumentedTestLab46.kt:128) ... 8 修剪 引起原因:java.lang.Throwable:“android.widget.TextView 和 view.getText() 的实例,无论是否进行转换以匹配:是“ACTION_ASSIST””与所选视图不匹配。 预期: android.widget.TextView 和 view.getText() 的实例,有或没有转换以匹配:是“ACTION_ASSIST” 得到:view.getText()是“android.intent.action.BATTERY_CHANGED”转换后的文本是“android.intent.action.BATTERY_CHANGED” 查看详细信息:MaterialTextView{id=2131231135、res-name=status_text、visibility=VISIBLE、width=1080、height=2105、has-focus=false、has-focusable=false、has-window-focus=true、is-clickable = false,is-enabled = true,is-focused = false,is-focusable = false,is-layout-requested = false,is-selected = false,layout-params = android.widget.LinearLayout$LayoutParams@YYYYYY,标签= null,root-is-layout-requested = false,has-input-connection = false,x = 0.0,y = 0.0,text = android.intent.action.BATTERY_CHANGED,inp ... 在 ru.myitschool.lab23.DescriptionFailureHandler.handle(InstrumentedTestLab46.kt:234) ... 19 更多

主要活动:

                 import android.content.BroadcastReceiver;
                 import android.content.Context;
                 import android.content.Intent;
                 import android.content.IntentFilter;
                 import android.net.ConnectivityManager;
                 import android.os.Bundle;
                 import android.widget.TextView;

                 import androidx.annotation.Nullable;
                 import androidx.appcompat.app.AppCompatActivity;

      public class MainActivity extends AppCompatActivity {

     TextView statusText;
      BroadcastReceiver myBroadcastReceiver;


       @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       statusText = findViewById(R.id.status_text);
       myBroadcastReceiver = new MyBroadcastReceiver();

     }

      public BroadcastReceiver makeBroadcastReceiver(){




        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
         filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
         filter.addAction(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED);
         filter.addAction(Intent.ACTION_APPLICATION_LOCALE_CHANGED);
         filter.addAction(Intent.ACTION_ASSIST);
         filter.addAction(Intent.ACTION_BATTERY_CHANGED);
         filter.addAction(Intent.ACTION_BATTERY_LOW);
         filter.addAction(Intent.ACTION_BATTERY_OKAY);
         filter.addAction(Intent.ACTION_CALL);
         filter.addAction(Intent.ACTION_DATE_CHANGED);
         filter.addAction(Intent.ACTION_DEFAULT);
         filter.addAction(Intent.ACTION_HEADSET_PLUG);
         filter.addAction(Intent.ACTION_LOCALE_CHANGED);
         filter.addAction(Intent.ACTION_TIME_TICK);

        this.registerReceiver(myBroadcastReceiver, filter);


        return myBroadcastReceiver;
       }

       private class MyBroadcastReceiver extends BroadcastReceiver {
       public MyBroadcastReceiver() {
       }


    public void onReceive(Context context, Intent intent) {

     statusText.setText(intent.getAction());

      }
     }
    @Override
    protected void onStop(){

    super.onStop();
    unregisterReceiver(myBroadcastReceiver);
        }

        }

我有一个任务是创建一个广播接收器,它可以接收13种不同的广播并将它们的值输出到statucText,也就是说,如果我们有ACTION_TIME_TICK广播,那么应该在statusText中设置文本ACTION_TIME_TICK。该任务需要返回广播接收器的 makeBroadcastReceiver() 方法。 在我们的培训中,大部分资料都要自己去查找,所以我什至花了好几天的时间,寻找如何做的信息,这是我第一次使用Broadcast Receiver。

android broadcastreceiver broadcast
1个回答
0
投票

可能有一个糟糕的 UI 测试——你不应该在系统中注册接收器,或者使用标志来注册它

Context.RECEIVER_NOT_EXPORTED
:

this.registerReceiver(myBroadcastReceiver, filter, Context.RECEIVER_NOT_EXPORTED);

// or ContextCompat version (preferred)
ContextCompat.registerReceiver(this, myBroadcastReceiver, filter, ContextCompat.RECEIVER_NOT_EXPORTED);
此任务的

UI 测试从您的

BroadcastReceiver
方法创建
MainActivity. makeBroadcastReceiver
,然后根据任务中描述的
Intent.ACTION_*
列表进行检查。顺便说一句,仔细检查所有操作的名称 - 其中一些名称与相应的常量名称不同

© www.soinside.com 2019 - 2024. All rights reserved.