Android 问题集

记录一些代码小细节

 

1.Android 启动页android.intent.action.MAIN,启动模式不能设置为singleTask
这样会使你每次回到手机主页,再次进入APP,回到启动页。

如果真的要将之前的启动页设置singleTask。可以将启动页换成一张空白页。
空白页上直接调转到之前的启动页上。
例子:我之前的启动页是一张登录页面。登录页面需要将启动模式设置为singleTask.
所以当前启动页设置为空白页,直接跳转到登录页,登录页的启动模式还是设置singleTask,这样就不会出错了

 

2.关于文件读取问题

先排除文件过大,文件不存在和读取权限问题。
然后接下来就是Api29Q版本的问题了。问题有以下2 个:
open failed: EACCES (Permission denied)和BitmapFactory.decodeFile问题 。
因为N版本文件的读取方式发生了改变,如果想继续使用原先的方式读取。在AndroidManifest.xml加入以下代码:

  <application android:requestLegacyExternalStorage="true" ... >
       ...
     </application>

 

参考网址:Android Q(10.0 API29)版本新特性和兼容性适配

3.关于Http和Https的问题

这个也是Api27P版本之后的问题。27版本之后如果不经过特殊处理,网络方式必须是https
但也有方式在高版本使用http。
先在res文件中创建xml目录,然后在其下创建xml文件。文件内容以下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config> 

最后在AndroidManifest.xml加入以下代码:

<application
...
 android:networkSecurityConfig="@xml/network_security_config" />

参考网址:网络请求http/https问题

4.关于连续点击Toast不显示问题

 if (toast == null) {
        toast = Toast.makeText(mContext, s, Toast.LENGTH_SHORT);
 } else {
        //解决连续点击toast不显示问题
        toast.cancel();
        toast = Toast.makeText(mContext, s, Toast.LENGTH_SHORT);
 }
  toast.show();

5.关于使用AndroidAutoSize后,系统的复制粘贴,显示的特别小的问题

关于这个问题,官方推荐是使用副单位。如果在已经成型的项目里,这个方法不可行。然后我就找到了折中的方法。
先在弹出复制粘贴弹窗的时候取消适配,然后在点击屏幕的时候确定适配。

isCancleAdapter 判断是否取消适配

edText.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
            @Override
            public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
                //取消适配
                AutoSize.cancelAdapt((Activity) mContext);
                isCancleAdapter = true;
            }
        });
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        //点击屏幕,如果有点击适配的时候,才去重新适配
        if (isCancleAdapter){
            AutoSize.autoConvertDensityOfGlobal((Activity) mContext);
            isCancleAdapter = false;
        }
        return super.dispatchTouchEvent(ev);
    }

 

未完待续。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章