java - 如何将数据从 PhoneStateListener 子类发送到活动?
问题描述
我有以下类,它们分别是AppCompatActivity
和的子类PhoneStateListener
;我想从第二个中获取 2 个值并将它们与第一个中的值一起打印。
MainActivity.java
public class MainActivity extends AppCompatActivity {
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.info);
}
public void onSubmit(View v) {
TelephonyManager tm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(new SecondActivity(this),PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
String opname="\nOperator ID:"+" "+tm.getNetworkOperator();
opname=opname+"\nOperator Name:"+" "+tm.getNetworkOperatorName();
int phoneType=tm.getPhoneType();
String ptype="";
switch(phoneType)
{
case TelephonyManager.PHONE_TYPE_CDMA:
ptype="\nPhone Type: CDMA\n";
break;
case TelephonyManager.PHONE_TYPE_GSM:
ptype="\nPhone Type: GSM\n";
break;
case TelephonyManager.PHONE_TYPE_SIP:
ptype="\nPhone Type: SIP\n";
break;
case TelephonyManager.PHONE_TYPE_NONE:
ptype="\nPhone Type: NONE\n";
break;
}
tv.setText(opname+ptype);
}
}
SecondActivity.java
public class SecondActivity extends PhoneStateListener {
Context mcontext;
double value1=0,value2=0;
String error,ss;
public SecondActivity(Context context){
mcontext=context;
}
public void onSignalStrengthsChanged(SignalStrength signalStrength){
super.onSignalStrengthsChanged(signalStrength);
if (signalStrength.isGsm()) {
value1=signalStrength.getGsmBitErrorRate();
error="\nGsmBitErrorRate:"+value1;
value2=signalStrength.getGsmSignalStrength();
ss="\nGsmSignalStrength:"+value2;
}
}
}
解决方案
向 MainActivity 添加一个公共方法,可以从您的第二个类访问该方法:
public class MainActivity extends AppCompatActivity {
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.info);
}
public void onSubmit(View v) {
TelephonyManager tm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(new SecondActivity(this),PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
String opname="\nOperator ID:"+" "+tm.getNetworkOperator();
opname=opname+"\nOperator Name:"+" "+tm.getNetworkOperatorName();
int phoneType=tm.getPhoneType();
String ptype="";
switch(phoneType)
{
case TelephonyManager.PHONE_TYPE_CDMA:
ptype="\nPhone Type: CDMA\n";
break;
case TelephonyManager.PHONE_TYPE_GSM:
ptype="\nPhone Type: GSM\n";
break;
case TelephonyManager.PHONE_TYPE_SIP:
ptype="\nPhone Type: SIP\n";
break;
case TelephonyManager.PHONE_TYPE_NONE:
ptype="\nPhone Type: NONE\n";
break;
}
tv.setText(opname+ptype);
}
//declare a public method which is accessable in onSignalStrengthsChanged callback in the second class.
public void do_what_you_wanna_do_with_these_two_values(double value1,double value2){
tv.setText("here are my values: "+String.valueOf(value1)+" , "+String.valueOf(value1));
}
}
并使用它将信息传递给 MainActivity:
public class SecondActivity extends PhoneStateListener {
Context mcontext;
double value1=0,value2=0;
String error,ss;
private MainActivity first_activity_instance;
public SecondActivity(Context context){
mcontext=context;
first_activity_instance =(MainActivity)mcontext;
}
public void onSignalStrengthsChanged(SignalStrength signalStrength){
super.onSignalStrengthsChanged(signalStrength);
if (signalStrength.isGsm()) {
value1=signalStrength.getGsmBitErrorRate();
error="\nGsmBitErrorRate:"+value1;
value2=signalStrength.getGsmSignalStrength();
ss="\nGsmSignalStrength:"+value2;
//now pass them to your to your activity instance
first_activity_instance.do_what_you_wanna_do_with_these_two_values(value1,value2);
}
}
}
推荐阅读
- python - shell脚本是否有类似类型的python列表
- php - PHP - 带空格的 strpos()
- python-3.x - 如何使用 tika 解析器配置 google vision api
- terraform - Terraform (A)lb 重定向 http -> https
- javascript - 用酶和 Jest 测试 React:不变违规:目标容器不是 DOM 元素
- java - Android 每次运行时都会在服务器/数据库上保存日志以获取崩溃报告?
- spring-boot - Spring Boot - SSL 设置(./well-known/pki-validation)
- c++ - C++ 中的纯 ABC 是否需要是虚拟的?
- spring - 实施从登录的 jhipster 用户获取数据的方法时出现“无法解析符号”错误
- arm - 难以在具有 Mini PCIe 总线的 Spartan 6 FPGA 和 ARM-cortex A9(IMX6 架构)之间建立通信