Android开发知识点

一、时区信息获取:

通过网络获取当前时区timezoneid--网页:

   http://www.webyield.net/ip/

http://ip-api.com/json


二、问题:在开机向导界面搜台时,用户把蓝牙遥控器的电池扣掉,搜台界面会自动退出。
原因:蓝牙遥控器的按键输入原理实际上跟键盘的按键属于同一个类型的。蓝牙遥控器扣掉电池对于安卓系统来说相当于拔掉键盘。
默认情况下,安卓在插拔键盘时,当前显示的界面所属的activity会销毁并重新加载。
因为搜台界面只是一个对话框实现的,只是activity的一部分,所以扣电池时,activity会重新加载,但并不会还原显示搜台界面。

对策:在软件上的搜台所属的activity添加keyboardHidden属性,activity就不会销毁并重新加载。
工厂在搜台时,请不要扣掉电池。针对此问题,以后会修改软件在用户端进行ota升级解决此问题。 

三、ListView setSelection() 无效:
        1、确定该ListView是否获取到了焦点:
            list.requestFocus();
            list.requestFocusFromTouch();
            再setSelection
        2、保证ListView已经加载完成,延时一段时间再setSelection

四、自定义View只能接收到设置onTouchListener后只能接收到MotionEvent.ActionDown的Action响应,无法接收到MotionEvent.ActionUp和MotionEvent.ActionMove的Action是因为该View未设置android:clickable="true"。


五、可通过 读取  "/sys/class/net/wlan0/" 下面的相关文件获取到与wifi相关的所有数据 (有线同理:“/sys/class/net/eth0/”)

     eg:获取wlan vendor id : /sys/class/net/wlan0/device/idVendor  存储在该文件中,为16进制
            获取wlan MAC :sys/class/net/wlan0/address

六、android应用成为系统应用需要在AndroidManifest中添加 -- 

       android:process="system"

       android:sharedUserId="android.uid.system"

七、ViewFlipper 调用removeView 后 再 addView,会导致当前的显示子view发生改变----即调用getDisplayedChild()会相应的+1.

八、txt文件乱码问题 --- 将packages/apps/HTMLViewer/src/com/android/htmlviewer/HTMLViewerActivity.java 文件的oncreate方法中添加默认编码为gbk    ---        s.setDefaultTextEncodingName("GBK");

九、在fragment中调用onOptionsItemSelected时,无效 --在onCreate中 需要设置setHasOptionsMenu(true);

十、onPostCreate回调函数的意义:   --- 对view的操作有时候不能放在onresume()中执行,会出现ANR

       在android中一个Activity的创建时,界面的绘制是需要时间的,当我们需要执行某个操作时,如果界面复杂,尚未绘制完成,很容易导致anr.那么如何确保在界面绘制完成,这就是此函数的意义所在了.onPostCreat是在界面绘制完成之后相继执行的.

十一、有些广播必须设置相应的DataScheme 才能接收到。

IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED);
        intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
        intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
        intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
        intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);
        intentFilter.addDataScheme("file");
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
        filter.addDataScheme("package");

 广播指定包名接收,或者指定某个broadcast接收(Android8.0后有些系统广播必须指定包名)

    Intent intent = new Intent("com.android.server.tv.TIME_EVENT_LAST_MINUTE_WARN");
    //intent.setComponent(new ComponentName("com.mstar.tv.tvplayer.ui","com.mstar.tv.tvplayer.ui.TVBroadcastReceiver")); //指定包名+类名
    intent.setPackage("com.mstar.tv.tvplayer.ui"); //指定包名
     //intent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND); //设置为前台广播
     sendBroadcast(intent);

十二、在刚开机时,由于后台需要初始化很多东西,这个时候发送广播可能会被阻塞掉,导致广播无发被接收到,此时可以将广播设置为前台广播,可以有效的解决广播延时的问题,因为前台广播会被优先处理。

Intent intent = new Intent("android.intent.action.MASTER_CLEAR");
        intent.putExtra("from", "restorefactory");
        intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); //设置为前台广播
        sendBroadcast(intent);

十三、Android自定义开机向导中需要添加相应的属性控制,否则会出现HOME键无效

            // Add a persistent setting to allow other apps to know the device
            // has been provisioned.
            Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
            Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);


三、Android中key的传递机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值