标签: Android

阿木木 | 6天前 | Android

图片加载失败出现如下问题,原因就是glide加载Https图片没有证书无法显示

SSLHandshake问题解决思路如下: 在Application中配置全局忽略证书: js public static void handleSSLHandshake() { try { TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } @Override public void checkClientTrusted(X509Certificate[] certs, String authType) { } @Override public void checkServerTrusted(X509Certificate[] certs, String authType) { } }}; SSLContext sc = SSLContext.getInstance("TLS"); // trustAllCerts信任所有的证书 sc.init(null, trustAllCerts, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { @Override

 65 |  0 |  0 Android

阿木木 | 6天前 | Android

Android 使用MediaRecorder 录制MP3文件

使用 MediaRecorder 保存 .mp3 文件的变通方法。 Android MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setOutputFile(Environment.getExternalStorageDirectory() .getAbsolutePath() + "/myrecording.mp3"); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); recorder.prepare(); recorder.start();

 58 |  0 |  0 Android

阿木木 | 4周前 | Android

Android 操作相机增大或减少焦距的方法

js / 焦距增大 / public void addFocus(int cameraFocalValue) { if (mCamera.getParameters().isSmoothZoomSupported()) { Log.i("焦距", "不支持变焦"); return; } Camera.Parameters parameters = mCamera.getParameters(); final int maxZoom = parameters.getMaxZoom(); Log.i("焦距", "最大支持值" + maxZoom); final int nowZoom = parameters.getZoom();//当前焦距 Log.i("焦距", "当前焦距" + nowZoom); int setZoomValue = maxZoom cameraFocalValue / 10; Log.i("焦距", "设置焦距" + setZoomValue); parameters.setZoom(setZoomValue); List<String focusModes = parameters.getSupportedFocusModes(); if (focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) { parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); } else if (focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) { parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);

 174 |  0 |  0 Android

阿木木 | 4周前 | Android

Android 获取当前网速

工具类 js public class NetWorkSpeedUtils { private Context context; private Handler mHandler; private long lastTotalRxBytes = 0; private long lastTimeStamp = 0; public NetWorkSpeedUtils(Context context, Handler mHandler){ this.context = context; this.mHandler = mHandler; } TimerTask task = new TimerTask() { @Override public void run() { showNetSpeed(); } }; public void startShowNetSpeed(){ lastTotalRxBytes = getTotalRxBytes(); lastTimeStamp = System.currentTimeMillis(); new Timer().schedule(task, 1000, 1000); // 1s后启动任务,每2s执行一次 } private long getTotalRxBytes() { return TrafficStats.getUidRxBytes(context.getApplicationInfo().uid) TrafficStats.UNSUPPORTED ? 0 :(TrafficStats.getTotalRxBytes()/1024);//转为KB } private void showNetSpeed() { long nowTotalRxBytes = getTotalRxBytes(); long nowTimeStamp = System.currentTimeMillis()

 152 |  0 |  0 Android

阿木木 | 5周前 | Android

Retrofit学习之文件和参数上传

个人主页:https://www.qjos.cn/user/1057703 今天主要来学习Retrofit的文件和参数的上传,如果你不是很了解上传的原理,你可以看下文件上传原理,先了解下文件上传的基本原理。 参数上传 1. 参数个数不是很多时 js @FormUrlEncoded @POST("upload") Call<ResponseBody uploadParams(@Field("username")String username,@Field("token")String token); 使用直接传入参数值即可 2. 多个参数上传 js @FormUrlEncoded @POST("upload") Call<ResponseBody uploadParams(@FieldMap Map<String,String map); 调用的时候,直接传入一个map集合,即可 3. 通用的方法 js @POST("upload") Call<ResponseBody uploadParams(@Body RequestBody body); 调用时,传入一个RequestBody对象,OkHttp库中有一个专门用来构建参数上传的RequestBody子类,即FormBody,如下 FormBody body=new FormBody.Builder() .add("username","admin") .add("token","sjdkdjows=dmzkkshf") .build(); 在使用的时候,直接调用uploadParams (body)即可实现上传。 文件上传 1. 单个文件上传 js @Multipart @POST("upload") Call<ResponseBody uploadOneFile(@Part MultipartBody.Part body); 调用的使用MultipartBody.Part来构造一个Part对象参数 js String name = etFileName.getText().toString().trim(); name

 165 |  0 |  0 Android

阿木木 | 5周前 | Android

按照指定大小对文件进行拆分成片段代码

拆分方法 js / 文件按大小进行分割 @param sourceFilePath    源文件地址 @param partFileLength    分割文件的每一个片段大小标准 @param splitPath   分割之后片段所在文件夹 @return @throws Exception  / public void splitFile(String sourceFilePath, int partFileLength, String splitPath) { int mPartFileLength = partFileLength;// Log.i("本地视频", "sourceFilePath" + sourceFilePath + "-- partFileLength" + mPartFileLength + "-- splitPath" + splitPath); File sourceFile = null; File targetFile = null; InputStream ips = null; OutputStream ops = null; OutputStream configOps = null;//该文件流用于存储文件分割后的相关信息,包括分割后的每个子文件的编号和路径,以及未分割前文件名 Properties partInfo = null;//properties用于存储文件分割的信息 byte[] buffer = null; int partNumber = 1; try { sourceFile = new File(sourceFilePath);//待分割文件 ips = new FileInputStream(sourceFile);//找到读取源文件并获取输入流 //创建一个存放分片的文件夹,不存在就创建

 146 |  0 |  0 Android

阿木木 | 6周前 | Android

Android硬件解码组件MediaCodec使用教程

在Android开发中提供了实现音视频编解码工具MediaCodec,针对对应音视频解码类型通过该类创建对应解码器就能实现对数据进行解码操作。本文通过示例详细讲解了MediaCodec的使用,需要的可以参考一下 1.MediaCodec 是什么 MediaCodec类可以访问底层媒体编解码器框架(StageFright 或 OpenMAX),即编解码组件。是Android 的低层多媒体基础设施的一部分(通常与MediaExtractor、MediaSync、MediaMuxer、Image、Surface和AudioTrack一起使用),它本身并不具备Codec能力,通过调动底层编解码组件获得了Codec的能力。 2.创建MediaCodec的方式 2.1按照格式创建 createDecoderByType(String type):创建解码器 createEncoderByType(String type):创建编码器 type是数据解析阶段的mimeType,如"video/avc" 2.2按照名字创建 createByCodecName(String name) OMX.google.h264.decoder: 软解码 OMX.MTK.VIDEO.DECODER AVC:硬解码 3.MediaCode硬件解码并进行播放实例 js private String mFilePath="/sdcard/DCIM/189017886849403.mp4"; private DecodeThread mDecodeThread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_media_codec_decode); SurfaceView surfaceView=new SurfaceView(this); / 不自己维护缓冲区,等待屏幕的渲染引擎 将内容推送到用户前面 / surfaceView.get

 173 |  0 |  0 Android

阿木木 | 6周前 | Android

Android中获取文件大小的常用工具类

Android 获取文件大小的常用工具类 js public class FileSizeUtil { public static final int SIZETYPE_B = 1;//获取文件大小单位为B的double值 public static final int SIZETYPE_KB = 2;//获取文件大小单位为KB的double值 public static final int SIZETYPE_MB = 3;//获取文件大小单位为MB的double值 public static final int SIZETYPE_GB = 4;//获取文件大小单位为GB的double值 / 获取文件指定文件的指定单位的大小 @param filePath 文件路径 @param sizeType 获取大小的类型1为B、2为KB、3为MB、4为GB @return double值的大小 / public static double getFileOrFilesSize(String filePath, int sizeType) { File file = new File(filePath); long blockSize = 0; try { if (file.isDirectory()) { blockSize = getFileSizes(file); } else { blockSize = getFileSize(file); } } catch (Exception e) { e.printStackTrace(); Log.e("获取文件大小", "获取失败!"); } return FormetFileSize(blockSize, sizeType); } / 调用此方法自动计算指定文件或指定文

 184 |  0 |  0 Android

阿木木 | 2个月前 | 安卓优化Android

Android中MediaPlayer实现按次数呼叫响铃功能(播放assets下文件)

话不多说直接上代码 js public class CallMediaPlayer { private MediaPlayer mediaPlayer; private int playbackNum = 7;//播放次数(按14秒算) private PlayResultCallBack playResultCallBack; //播放回调 public interface PlayResultCallBack { //开始播放 void onStatrPlay(); //结束播放 void onStopPlay(); } / 开始播放和停止播放的监听设置 @param playResultCallBack / public void setPlayResultCallBack(PlayResultCallBack playResultCallBack ){ this.playResultCallBack=playResultCallBack; } / 开始呼叫响铃 / public void startCallRinging(Activity activity) { if (mediaPlayer null) { mediaPlayer = new MediaPlayer(); } if (mediaPlayer.isPlaying()) { return; } mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { if (playbackNum 1 != 0) {

 403 |  0 |  0 安卓优化Android

阿木木 | 2022-12-30 | AndroidUI界面

Android中RecyclerView 自动滑动到底部的代码设置

今天在写聊天记录页面,RecyclerView 来做聊天记录列表展示。当用户发送消息后,如何让RecyclerView滑到最底部? 复制代码即可 js LinearLayoutManager linearLayoutManager=new LinearLayoutManager(mContext); linearLayoutManager.setStackFromEnd(true); linearLayoutManager.scrollToPositionWithOffset(imMsgItemAdapter.getItemCount()-1,Integer.MIN_VALUE); recyclerview.setLayoutManager(linearLayoutManager);

 359 |  0 |  0 AndroidUI界面

阿木木 | 2022-12-29 | Android

Android 代码动态设置 drawableLeft|Right|Top|Bottom

XML js <TextView android:id="@+id/demo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@mipmap/abc" android:drawableRight="@mipmap/abc" android:drawableTop="@mipmap/abc" android:drawableBottom="@mipmap/abc" android:drawablePadding="5dp" android:text="abc" / android:drawableLeft 在文本框内文本的左边绘制指定图像 android:drawableRight 在文本框内文本的右边绘制指定图像 android:drawableTop 在文本框内文本的顶端绘制指定图像 android:drawableBottom 在文本框内文本的底端绘制指定图像 android:drawablePadding 设置文本框内文本与图形之间的间距 JAVA js Drawable abc= getResources().getDrawable(R.mipmap.abc); // 调用 setCompoundDrawables 时,必须调用 Drawable.setBounds() 方法,否则图片不显示 abc.setBounds(0, 0, abc.getMinimumWidth(), abc.getMinimumHeight()); demo.setCompoundDrawables(abc, null, null, null); setCompoundDrawables(leftDrawable, topDrawable, rightDrawable, bottomDrawable) 在文本框内文本的四周绘制指定图像。

 386 |  0 |  0 Android

阿木木 | 2022-12-29 | Android

Android中用代码控制layout_gravity的设置

今天,简单讲讲android LinearLayout中如何使用setGravity()。 之前,在做一个功能时,需要根据数据的变化设置LinearLayout的gravity 。之前,自己写代码都是直接在xml文件里通过roid:gravity设置的属性,这次需要在java代码里动态设置时,居然不知道怎么设置。后来,在网上搜索了资料后,发现setGravity()就可以设置,这里记录一下。 在进行UI布局的时候,可能经常会用到 android:gravity 和 android:layout_Gravity 这两个属性。 LinearLayout有两个非常相似的属性: android:gravity与android:layout_gravity。 他们的区别在于: android:gravity 属性是对该view中内容的限定.比如一个button 上面的text. 你可以设置该text 相对于view的靠左,靠右等位置. android:layout_gravity是用来设置该view相对与父view 的位置.比如一个button 在linearlayout里,你想把该button放在linearlayout里靠左、靠右等位置就可以通过该属性设置. 即android:gravity用于设置View中内容相对于View组件的对齐方式,而android:layout_gravity用于设置View组件相对于Container的对齐方式。 原理跟android:paddingLeft、android:layout_marginLeft有点类似。如果在按钮上同时设置这两个属性。 android:paddingLeft="30px" 按钮上设置的内容离按钮左边边界30个像素 android:layout_marginLeft="30px" 整个按钮离左边设置的内容30个像素 下面回到正题, 我们可以通过设置android:gravity="center"来让EditText中的文字在EditText组件中居中显示;同时我们设置EditText的android:layout_gravity="right"来让EditText组件在LinearLayout中居右显示。看下效果: 正如我们所看到的,在...

 332 |  0 |  0 Android

阿木木 | 2022-12-29 | Android

Android中 onActivityResult 回调中requestCode 随机问题

今天开发时出现一个问题,在activity的onActivityResult()方法中获取的requestCode并不是我调用startActivityForResult()方法时传入的requestCode,而是一个随机数。每次调用都是不同的数字。经检查发现是在Fragment里调用startActivityForResult()时没有使用getActivity()来调用。 修改前: js startActivityForResult(intent,0); 修改后: js getActivity().startActivityForResult(intent,0); 完美解决问题,记录一下

 315 |  0 |  0 Android

阿木木 | 2022-12-28 | Android

Android 简单实现SD卡文件管理器功能

项目中需要用到一个简单的文件选择器,来选择SD卡里的文件,做一个简单的DEMO功能实现。 ![dfac047e72e741fcaef5b5b78c369e14](https://qiniu.qjos.cn/dfac047e72e741fcaef5b5b78c369e14.jpeg) 写的比较粗糙,资源图片就不上传了,屏蔽掉即可!很简单的东西没什么技术含量,以后再继续优化吧! 功能 点击文件夹进入该文件夹下的目录并列出文件 非文件夹可直接选择选取该文件 Activity js package com.yh.fireworks.ui.activity; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.yh.fireworks.R; import com.yh.fireworks.base.BaseActivity; import com.yh.fireworks.model.FileDataInfo; import com.yh.fireworks.ui.adapter.FolderManageAdapter; import com.yh.fireworks.utils.StringUtils; import com.yh.fireworks.utils.ToastUtils; import com.yh.fireworks.validate.util.StringUtil; import com.yh.fireworks.widget.WrapConte

 323 |  0 |  0 Android

阿木木 | 2022-12-27 | Android

Android 在Fragment中执行onActivityResult不被调用的简单解决方法

在Android开发中,我们经常会用到FragmentActivity下嵌套多个Fragment,但是在开发过程中会发现在嵌套的Fragment中使用onActivityResult回调方法没有被执行。 网上也有很多解决方法,但是说的都比较麻烦,所以今天给大家推荐一种超简单的用法, 在Fragment和FragmentActivity中都要重写onActivityResult方法,并且要保证两者的请求码或者结果码一致。代码如下: 在FragmentActivity中 js @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(resultCode){ case 1://该结果码要与Fragment中的一致 //我这里使用的是根据结果码获取数据,然后加上下面一句代码,其 //他的什么都不用做 super.onActivityResult(requestCode,resultCode,data); break; case 2: super.onActivityResult(requestCode,resultCode,data); break; ...... } } 在Fragment中 js @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode){ case 1://该结果码与FragmentActivity中是保持一致的 //在这里获取你需要的数据 break; case 2:

 276 |  0 |  0 Android