如何从Android中的1个类变为另一个类?

时间:2016-03-15 04:00:42

标签: java android

我正在编写应用程序来记录呼叫并上传所有文件都是记录。

获取路径文件名时出现问题并将其上传到我的服务器中。

我想当1个文件成功录制然后上传。

我有两节课: 用于记录通话的班级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到文件记录。

此课程在Event时获得incoming and outcoming call。 当通话状态结束时,它将UploadFile

如何将类fileName的变量Audiorecorder的值变为下面的类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);

2 个答案:

答案 0 :(得分:0)

我们可以通过多种方式从一个对象访问其他对象。这些是主要的两种方式

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

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

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

更高级的方法是通过Refection。

答案 1 :(得分:0)

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

这里,AudioRecorder是一个公共类,所以这个名为fileName的变量将可以访问项目范围内的任何地方。

因此,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  ?? */