2016-03-15 88 views
-3

我正在写应用程序来记录通话并上传所有文件是记录。如何从一个类中的变量获取Android中的另一个类?

我有问题,当获取路径文件名并将其上传到我的服务器。

我想当1个文件被记录成功,然后它会上传。

我有2类: 类AudioRecorder来记录呼叫。

public class AudioRecorder { 

    static String fileName; 

    MediaRecorder mediaRecorder; 
    public void start() { 
     File directory = new File(fileName).getParentFile(); 
     mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     mediaRecorder.setOutputFile(fileName); 
     mediaRecorder.prepare(); 
     mediaRecorder.start(); 
       } 

    public String courseGet(String startDate) { 
     return Environment.getExternalStorageDirectory().getAbsolutePath() + "/GhiAmCuocGoi/" 
       + startDate + configPreferenceManager.getPathFormat(); 
    } 
} 

此类fileName变量包含PATH到文件记录。

而且这个类别得到Eventincoming and outcoming call。 当呼叫状态结束时,它将会UploadFile

如何获取类Audiorecorder的变量fileName的值到fileToUploadPath类的波纹管变量。

在这个类是:

TelephonyManager telManager = (TelephonyManager) context 
       .getSystemService(Context.TELEPHONY_SERVICE); 

telManager.listen(new PhoneStateListener() { 
@Override 
public void onCallStateChanged(int state, String incomingNumber) { 

    if (state != pState) { 
     if (state == TelephonyManager.CALL_STATE_OFFHOOK && callInfoPreferenceManager.getCallState()) { 
      Toast.makeText(
        context, 
        callInfoPreferenceManager.getName() + " " 
          + callInfoPreferenceManager.getPhoneNumber() 
          + "\n" + "Start recording!!!", Toast.LENGTH_SHORT).show(); 

     } else if (state == TelephonyManager.CALL_STATE_IDLE && callInfoPreferenceManager.getCallState() == CALLING) { 
      Toast.makeText(context, "Record success.", Toast.LENGTH_SHORT).show(); 

      // I WILL UPLOAD AT HERE. AFTER RECORD SUCCESS 
      MultipartUploadRequest req = new MultipartUploadRequest(this, serverUrlString) 
       .addFileToUpload(fileToUploadPath, paramNameString); 
     } 
    } 
}, PhoneStateListener.LISTEN_CALL_STATE); 

回答

0

有我们可以从另外一个对象上访问变量很多方面。这些是主要的两种方式

1)为变量getFileName()创建getter方法并通过创建的对象进行访问。

2)如果变量是静态的,那么你可以编写静态的getter函数。例如: :public static String getVal();

还有其他一些方法,如直接访问该方法,将变量定义为public,protected或default,但不推荐,因为它违反了OOP原则。

更高级的方法是通过Refection。

0

AudioRecorder.fileName是访问文件名的最佳方式,因为fileName是该类的一个static成员。并且当class正被加载到内存中时将被加载。

这里,AudioRecorder是一个公共类,因此这个名为fileName的变量将访问项目Scope中的任何地方。

所以,AudioRecorder.fileName是一个更好的访问方式。

MultipartUploadRequest req = new MultipartUploadRequest(this, serverUrlString) 
       .addFileToUpload(AudioRecorder.fileName, paramNameString); 
    // File Name passed as a parameter. 

    /*You should also put a check wheather this variable contains any actual 
    FileName that exists in Phone Memory(Either Internal/External) or Not ?? */ 
+0

我使用'AudioRecorder audioRecorder =新AudioRecorder();'但 'audioRecorder.fileName'不在这一类里找到。 – Luna

+0

其“静态”成员,因此不需要任何“对象”来访问该特定的变量'fileName'。所以只要尝试一次我已经推荐给你的东西。 “静态”成员变量作为单个实体在所有对象之间共享。所以,@Luna或者使用'audioRecorder.fileName'或者'AudioRecorder.fileName'都会给你相同的结果。谢谢 –

相关问题