使用android内部API并获取null值

时间:2012-01-06 13:39:37

标签: java android

我使用的是com.android.internal.telephony类,它们是Call.java,CallManager.java和Connetion.java。对于这些课程,请单击下面的链接。 Call.javaCallManager.javaConnection.java。我为Call.java和Connection.java创建了子类,如下所示:

 Call call = new MyCall();
 Connection conn = new MyConnection();

Call.java的子类如下:

public class MyCall extends Call{   

CallManager cm = CallManager.getInstance();
MyCall fgCall;
 private final ArrayList<Connection> emptyConnections = new ArrayList<Connection>();

@Override
public List<Connection> getConnections() {      

    fgCall = (MyCall) cm.getActiveFgCall();
    System.out.println("**inside getConnections="+fgCall);
    if ( fgCall != null) {
        return fgCall.getConnections();
    }
    return emptyConnections;

}

@Override
public Phone getPhone() {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void hangup() throws CallStateException {
    // TODO Auto-generated method stub

}

@Override
public boolean isMultiparty() {
    // TODO Auto-generated method stub
    return false;
}

public Connection getEarliestConnection() {
    List l;
    long time = Long.MAX_VALUE;
    Connection c;
    Connection earliest = null;

    l = getConnections();

    if (l == null) {
        return null;
    }else if ( l.size() == 0)
    {
        return null;
    }

    for (int i = 0, s = l.size() ; i < s ; i++) {
        c = (Connection) l.get(i);
        long t;

        t = c.getCreateTime();

        if (t < time) {
            earliest = c;
            time = t;
        }
    }

    return earliest;
}

}

我调用CallManager.java如下:

CallManager cm = CallManager.getInstance();  

Bcoz这是一个'final'修饰符类,我这样调用。 我的另一个类是CallUpdate.java。在这个类中,我分别调用了Call和Connection类的getEarliestConnection()和DisconnectCause方法。如下:

 public Object getCallFailedString(){
         myConn = myCall.getEarliestConnection();
          System.out.println("myConn is  ******"+myConn);
          System.out.println("myCall is  ******"+myCall);   
         if(myConn == null){
           System.out.println("myConn is null ******");
               return null;
           }                
          else {
                 Connection.DisconnectCause cause = myConn.getDisconnectCause();                           System.out.println("myconn is not null ******"+cause);
                }

但我得到的连接是空的,即只有部分被执行而不是其他部分。为此,我从CallManger中调用了getActivefgCall,如下所示:

public List<Connection> getConnections() {      
               fgCall = (MyCall) cm.getActiveFgCall();
                 System.out.println("**inside getConnections="+fgCall);
                 if ( fgCall != null) {
                           return fgCall.getConnections();
                        }
                  return emptyConnections;
                }

但是我仍然得到FgCall的null值,并且getCallFailedString方法也是如此。我想要执行getCallFailedString方法的其他部分。如何解决这个问题对我有帮助。 Thx提前

0 个答案:

没有答案