2016-03-15 85 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'都會給你相同的結果。謝謝 –

相關問題