Java 如何将数据从PhoneStateListener子类发送到活动?
我有以下几个类,它们分别是Java 如何将数据从PhoneStateListener子类发送到活动?,java,android,android-activity,Java,Android,Android Activity,我有以下几个类,它们分别是AppCompatActivity和PhoneStateListener的子类;我想从第二个中取两个值,并将它们与第一个中的值一起打印 MainActivity.java public class MainActivity extends AppCompatActivity { TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { s
AppCompatActivity
和PhoneStateListener
的子类;我想从第二个中取两个值,并将它们与第一个中的值一起打印
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);
}
}
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;
}
}
}
SecondActivity.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);
}
}
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);
}
}
}
实际创建并注册信号强度广播接收器,然后将数据传递给有意向的活动…您可以使用意向的可能副本,如果您想在从A转到活动B时传递数据,可以额外传递意向。例如:Intent i=新Intent(CurrentActivity.this,NewActivity.class);i、 putExtra(“键”,值);星触觉(i);SecondActivity实际上不是一个活动,它是一个扩展PhoneStateListener的类。value1和value2会随着信号强度随时间的变化而动态变化。感谢您的回答,但是SecondActivity无法从MainActivity中找到方法。它是否需要其他代码?这是不可能的。该方法是MainActivity的公共属性,因此传递给secondActivity(new secondActivity(this))的实例必须具有该方法。也许你没有更新你的项目或其他什么。谢谢你,我犯了一个错误,出现了问题