最近在做项目时,发现一些好用的类,现小计一下,大神勿入:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'org.apache.commons:commons-lang3:3.4'
compile 'commons-io:commons-io:2.4'
compile files('libs/javax.json-1.0.jar')
compile files('libs/okhttp-3.3.1.jar')
compile files('libs/okio-1.8.0.jar')
compile files('libs/commons-fileupload-1.3.2.jar')
}
其中,对于commons-io:commons-io:2.4 这个包,主要 使用的是IOUtils这个类,其提供了一些好用的方法,如IOUtils.toString(InputStream in)等。
对于javax.json-1.0.jar,其提供了功能更加强大的JSON数据的操作。
对于okhttp-3.3.1.jar,其提供了http和https的通信的一些功能,okhttp可以保证连接的可持续性,没各一定时间ping一次。还提供了发送muiltipart body的功能,另外对于该okhttp目前在android5.0以下的版本会出现SSLException的异常,主要原因是android底层TLS或者SSL的问题。
对于 commoms-fileupload-1.3.2.jar,提供了类似文件的储存功能,可以将multipart stream一层层的解析。
对于类的构造函数,其实都是static类型的。而static类型是存在class文件中的,private成员函数默认都是final类型的,所有不可以继承。
编译以上jar包的时候,会出现错误,此时是因为license文件不止一个,冲突的原因,只需在gradle文件中加入
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
以下代码,可以建立HTTP连接,android自带 的HttpUrlConnection。
String END_POINT = "https:/www.google.com";
URL url = new URL(END_POINT);
HttpUrlConnection connection = (HttpUrlConnection)url.openConnection();
InputStream error = null;
InputStream response = null;
DataOutputStream outputStream = null;
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type","application/json");
connection.setDoOutput(true);
connection.connect();
outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.write(data.getBytes(StandardCharSets.UTF_8));
outputStream.flush();
outputStream.close();
int res = connection.getResponseCode();
try{
response = connection.getInputStream();
JsonReader reader = Json.createReader(new InputStreamReader(response,StandardChatsets.UTF_8));
return reader.readObject();
}catch(IOException e) {
e.printStackTrace();
}finally {
IOUtils.closeQuietly(error);
}
public class AudioCapture {
private static final boolean D = true;
private static final String TAG = AudioCapture.class.getSimpleName();
private MicroPhoneLine mMicPhoneLine;
public AudioCapture () {
int bufSize = AudioRecord.getMinBufferSize(MicroPhoneLine.SAMPLE_RATE_IN_HZ,
MicroPhoneLine.CHANNEL_CONFIG,
MicroPhoneLine.AUDIO_FORMAT);
mMicPhoneLine = new MicroPhoneLine(MediaRecorder.AudioSource.DEFAULT,MicroPhoneLine
.SAMPLE_RATE_IN_HZ,MicroPhoneLine.CHANNEL_CONFIG,MicroPhoneLine.AUDIO_FORMAT,bufSize);
}
public InputStream getAudioInputStream(final RecordingStateListener stateListener,
final RecordingRMSListener rmsListener) {
mMicPhoneLine.startRecording();
PipedInputStream inputStream = new PipedInputStream(mMicPhoneLine.getBufferSize()*2);
try {
new AudioBufferThread(inputStream, stateListener, rmsListener).start();
} catch (IOException e) {
mMicPhoneLine.stop();
e.printStackTrace();
}
return inputStream;
}
public void stopCapture() {
mMicPhoneLine.stop();
}
private class AudioBufferThread extends Thread {
private final AudioStateOutputStream audioStateOutputStream;
public AudioBufferThread(PipedInputStream inputStream,
RecordingStateListener recordingStateListener,
RecordingRMSListener rmsListener)throws IOException {
audioStateOutputStream =
new AudioStateOutputStream(inputStream, recordingStateListener, rmsListener);
}
@Override
public void run() {
if(D) Log.d(TAG, "startRecording...");
while (mMicPhoneLine.isOpen()) {
copyAudioBytesFromInputToOutput();
}
closePipedOutputStream();
if(D) Log.d(TAG,"stop recording...");
}
private void copyAudioBytesFromInputToOutput() {
byte[] data = new byte[mMicPhoneLine.getBufferSize() / 5];
int numBytesRead = mMicPhoneLine.read(data, 0, data.length);
try {
if(numBytesRead>0)
audioStateOutputStream.write(data, 0, numBytesRead);
} catch (IOException e) {
mMicPhoneLine.stop();
}
}
private void closePipedOutputStream() {
try {
audioStateOutputStream.close();
} catch (IOException e) {
}
}
}
}
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "25.0.0"
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.goertek.smartear"
minSdkVersion 18
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
debug {
storeFile file("avs.keystore")
}
release{
storeFile file("avs.keystore")
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android"
}
}
buildTypes {
release {
minifyEnabled true
zipAlignEnabled true
//移除无用的资源文件
shrinkResources true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
/*
debug {
minifyEnabled true
zipAlignEnabled true
//移除无用的资源文件
shrinkResources true
signingConfig signingConfigs.debug
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
*/
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
testCompile 'junit:junit:4.12'
compile files('libs/commons-fileupload-1.3.2.jar')
compile files('libs/javax.json-1.0.jar')
compile files('libs/okhttp-3.3.1.jar')
compile files('libs/okio-1.8.0.jar')
compile files('libs/login-with-amazon-sdk.jar')
compile 'commons-io:commons-io:2.4'
compile 'org.apache.commons:commons-lang3:3.4'
compile files('libs/org.apache.http.legacy.jar')
}