/** * 隐藏软键盘 * * @param view */ protected void hideKeyboard(View view) { InputMethodManager imm = (InputMethodManager) view.getContext() .getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } }
分类:android
把VideoView设置为静音
// 设置准备完成监听 mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { // 准备完成后开始播放 mp.start(); // 设置静音 mp.setVolume(0, 0); } });
参考链接:
Socket通讯工具类
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Socket通讯工具类 */ public class SocketUtil { // 线程池 private static final ExecutorService ThreadPool = Executors.newCachedThreadPool(); /** * 发送Socket消息 * * @param targetIP 目标IP * @param targetPort 目标端口 * @param msg 消息 * @param callback 回调 */ public static void sendSocketMsg(final String targetIP, final int targetPort, final byte[] msg, final SocketUtilCallback callback) { ThreadPool.execute(new Runnable() { @Override public void run() { try { // 建立Socket连接 Socket socket = new Socket(targetIP, targetPort); socket.setSoTimeout(1000 * 10); // 写消息 OutputStream out = socket.getOutputStream(); out.write(msg); out.flush(); // 读取消息返回 byte[] readBuffer = new byte[1024]; InputStream in = socket.getInputStream(); int size = in.read(readBuffer); byte[] readBytes = null; if (size != -1) { readBytes = new byte[size]; System.arraycopy(readBuffer, 0, readBytes, 0, size); } // 关闭流和Socket连接 in.close(); out.close(); socket.close(); // 执行发送成功回调 if (callback != null && readBytes != null) { callback.onSuccess(readBytes); } } catch (IOException e) { // 执行发送失败回调 if (callback != null) { callback.onError(e); } } } }); } /** * 回调 */ public interface SocketUtilCallback { void onSuccess(byte[] result); void onError(Exception e); } }
Android 自定义 MarqueeView 实现跑马灯效果 – 使用说明
Retrofit2结果拦截器和判断异常类型
结果拦截器
Interceptor responseInterceptor = new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Response response = chain.proceed(chain.request()); if (response.body() != null) { String json = response.body().string().replace("\"data\":null", "\"data\":{}"); ResponseBody body = ResponseBody.create(response.body().contentType(), json); return response.newBuilder().body(body).build(); } return response; } };
判断异常类型
@Override public void accept(Throwable throwable) throws Exception { if (throwable instanceof HttpException) { String json = ((HttpException) throwable).response().errorBody().string(); } }
Android AlertDialog背景透明
1.定义AlertDialog透明样式
<style name="TransparentDialog" parent="Theme.AppCompat.Dialog"> <item name="android:windowBackground">@android:color/transparent</item> </style>
2.创建AlertDialog
View view = LayoutInflater.from(context).inflate(R.layout.dialog_sure, null, false); AlertDialog sureDialog = new AlertDialog.Builder(context, R.style.TransparentDialog).setView(view).create();
参考链接:
安卓图像数据格式
Android NDK开发,使用ndk-build编译
节选自:Android NDK开发,使用ndk-build编译
手动编译.so文件
从步骤八开始的第二种方式,不指定AndroidStudio编译工具(Cmake或者ndk-build),直接手动生成.so库
a, cmd 或者Android studio的Terminal 中进入jni的上一级目录
b, 输入ndk-build命令,在jni同级的目录中生成了一个libs文件夹,里面生成了各个cup架构对应的.so文件,