Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将数据从PhoneStateListener子类发送到活动?_Java_Android_Android Activity - Fatal编程技术网

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))的实例必须具有该方法。也许你没有更新你的项目或其他什么。谢谢你,我犯了一个错误,出现了问题