当前位置:  编程技术>移动开发
本页文章导读:
    ▪关于 MTK 双卡 开启/封闭 移动数据 的一些小研究        关于 MTK 双卡 开启/关闭 移动数据 的一些小研究 最近在研究MTK双卡手机,4.1的系统。要在程序里控制移动数据的开关,碰到难题了。因为发现,以前用反射的方法调用ConnectivityManager 类的setM.........
    ▪ 雷电搜寻之用户真正需求的是什么        雷电搜索之用户真正需求的是什么 7月18日,360 正式推出 Android 手机资源搜索平台——“雷电手机搜索”,搜索的内容为软件、游戏、电子书、音乐、铃声、壁纸、主题等7大类下载资源。.........
    ▪ 在ubuntu12.04停安装JDK       在ubuntu12.04下安装JDK ctrl+alt+t  打开命令行 首先激活Root密码,因为要使用sudo命令必须首先激活root密码 root passwd root  Step1: # 去oracle官网下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jd.........

[1]关于 MTK 双卡 开启/封闭 移动数据 的一些小研究
    来源: 互联网  发布时间: 2014-02-18
关于 MTK 双卡 开启/关闭 移动数据 的一些小研究

最近在研究MTK双卡手机,4.1的系统。要在程序里控制移动数据的开关,碰到难题了。因为发现,以前用反射的方法调用ConnectivityManager 类的setMobileDataEnabled方法失效了提示的信息显示找不到该方法,第一的反应是,难道4.1系统没有这个方法了,想想也不可能啊。
查源码,果断还是跟原先一样的。再次进行调试,取到了ConnectivityManager 类中所有的函数,也有此方法的存在。
查原因,可能是因为私有方法,无法调用到。但改代码能调用私有方法后,加权限,加系统签名后,还是如此,不知是我的代码有问题还是怎样,大家可以看下,勿笑。

private void setGprsEnable(boolean isEnable) {
        int result = 0;
ConnectivityManager mCM = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        try {
            Class clazz = Class.forName(mCM.getClass().getName());
            Constructor[] cons = clazz.getDeclaredConstructors();
            Constructor con = clazz.getConstructor();//getDeclaredConstructors();
            con.setAccessible(true);

            Field iConnectivityManagerField = clazz.getDeclaredField("mService");
            iConnectivityManagerField.setAccessible(true);
            Object iConnectivityManager = iConnectivityManagerField.get(mCM);
            //Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
            ConnectivityManager cm =  (ConnectivityManager)con.newInstance(iConnectivityManager);
            Class[] argClasses = new Class[1];
            argClasses[0] = Boolean.class;
            Method ms = clazz.getDeclaredMethod("setMobileDataEnabled", argClasses);
            ms.setAccessible(true);
            Object obj = ms.invoke(cm, isEnable);
            result = (Integer) obj;
        } catch (ClassNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

 既然此方法不通了,那就另外找方法了。先下了个海卓上网大师,结果提示需要系统签名才能控制数据开关,重启后app移动system/app中了,果断可以实现了,但不知用的是什么方法啊,无源码可查,google也查无资料。只能认真地观察下logcat了,看能不能有些发现。


皇天不负有心人啊,找到些信息。当开启数据连接时,logcat输出了一些关键信息

Provider/Settings(506): put string name = gprs_connection_setting , value = 1 userHandle = 0
SettingsProvider(506): insert(content://settings/system) for user 0 by 0
SettingsProvider(506): redundant, old Value: 0 new value: 1
SettingsProvider(506): system <- value=1 name=gprs_connection_setting for user 0

Provider/Settings(506): put string name = gprs_connection_sim_setting , value = 3 userHandle = 0
SettingsProvider(506): insert(content://settings/system) for user 0 by 0
SettingsProvider(506): redundant, old Value: 0 new value: 3
SettingsProvider(506): system <- value=3 name=gprs_connection_sim_setting for user 0

Provider/Settings(506): Global.putString(name=mobile_data, value=1 for 0
Provider/Settings(506): put string name = mobile_data , value = 1 userHandle = 0
SettingsProvider(506): redundant, old Value: 0 new value: 1
SettingsProvider(506): global <- value=1 name=mobile_data for user 0

 难道只要改这三个值就可以啦?果断无比欣喜尝试之。

ContentResolver cr = getWindow().getContext().getContentResolver();
Settings.System.putInt(cr, "gprs_connection_setting", 1);
Settings.System.putInt(cr, "gprs_connection_sim_setting", 3);
Settings.Global.putInt(cr, "mobile_data", 1);

 再加上 WRITE_SECURE_SETTINGS 和 WRITE_SETTINGS 权限 ,加系统签名再试。结果依然无法开启,但发现,下拉菜单里的快捷按钮,状态却已经改变了,数据连接显示已经打开了,就是信号值那少了个数据连接的H或者E图标。正纳闷着系统怎么没有对配置信息进行更新时,我试了下打开了飞行模式,开起来后又关了飞行模式,结果,数据连上了。飞行模式关闭后,系统开始重新配置网络了,将网络配置更新了,原先改的值开始生效了。


既然网络状态发生改变后,系统就能更新网络配置了,那是不是发送网络改变的广播就能立即更新我们修改的配置了呢?试着发了几个广播,可惜不行,不解。不过如果对wifi进行开关,效果跟飞行模式一样,依然能达到我想要的结果。so,时间有限,就先用这个方法吧。对wifi的开关我是如此操作的,因为wifi已经连接时,其实数据连接是否打开是无关紧要的,wifi关了后系统便会自动更新配置。

Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            switch(msg.what){
            case 0:
                //wifi打开,但未连接
                if(wifiManager.isWifiEnabled()&&mActivity.getWifiState()==200){
                    wifiManager.setWifiEnabled(false);
                    sendEmptyMessageDelayed(2, 200);
                }
                else if(wifiManager.isWifiEnabled()){

                }
                else{
                    wifiManager.setWifiEnabled(true);
                    sendEmptyMessageDelayed(1, 200);
                }
                break;
            case 1:
                wifiManager.setWifiEnabled(false);
                break;
            case 2:
                wifiManager.setWifiEnabled(true);
                break;
            }
            super.handleMessage(msg);
        }
    };

 现在问题就解决了。由于我用的是MTK双卡的系统,所以这里还要稍微处理下

int defaultsim = getDefaultSim();
Settings.System.putInt(cr, "gprs_connection_setting", defaultsim);

 getDefaultSim()方法是MTK的接口,用反射就能取到了。这里就不再贴出来了。对了,别忘了加权限 CHANGE_NETWORK_STATE、CHANGE_WIFI_STATE、ACCESS_WIFI_STATE。

这个方法虽然不完美,但总是能用了,OMG,有时间再慢慢研究吧


    
[2] 雷电搜寻之用户真正需求的是什么
    来源: 互联网  发布时间: 2014-02-18
雷电搜索之用户真正需求的是什么
7月18日,360 正式推出 Android 手机资源搜索平台——“雷电手机搜索”,搜索的内容为软件、游戏、电子书、音乐、铃声、壁纸、主题等7大类下载资源。

   “雷电手机搜索”每个类别都包含海量资源搜索下载,用户在雷电里可以完成搜索和下载的全部过程,搜索到想要的资源后通过360手机助手可以一键下载到手机,使用过程非常方便。

  给用户简单的产品

  “雷电手机搜索”和 360 其余产品针对的用户群一样,锁定为小白用户。对于那些不知道在哪里下应用下游戏下电子书下音乐的用户来说,寻找并下载到合适的资源在过去的搜索引擎里需要经过多次跳转,而“雷电手机搜索”对资源进行了整合,在同一个平台进行呈现。

   “雷电手机搜索”在某种程度上和百度的“框计算”很像,都是给用户提供最直接的服务,不需要用户再做二次跳转,只是“雷电手机搜索”对资源进行大类划分,资源的针对性更强,用户或许根本不在乎电脑里装的是 360 手机助手还是豌豆荚或者91手机管家,用户只考虑怎么用最快的方式得到自己想要的东西,用户不需要做过多的挑选和判断,对用户来说,足够简单的产品才是好产品。

  从手机助手到内容入口的进化

  手机助手是 PC 端控制手机的内容入口,在移动互联网的大爆发阶段,应用商店曾被看做是最重要的流量入口,应用商店中的下载推荐,可以直接决定一款应用的用户数量。而手机助手的崛起被看做是新的管道,同样有巨大的流量和内容分发价值,掌握了手机助手的桌面端,等于在另一种程度上占据了手机的内容入口,其价值就不仅仅是停留在 App 的分发,还有更大的想象空间,而 360 手机助手将想象空间进行了扩大,变成了手机内容的入口,“雷电手机搜索”是这个入口的搜索端。

  但事实上,并不是只有 360 手机助手这么做,一年前的这个时候,豌豆荚也发布了自己的新产品豌豆荚百宝袋,豌豆荚百宝袋是基于豌豆荚软件的一个产品扩展,在传统豌豆荚获取应用的服务上增加了更多资源的获取。豌豆荚百宝袋把浏览器和手机助手相结合,从单纯的应用助手转变到整个手机端的内容入口,充当了从桌面到移动端的管道工角色,从过去的应用平台,拓展到整个互联网的内容平台。

   而如今的“雷电手机搜索”将平台更一步扩大,虽然 360 手机助手里也内置了“雷电手机搜索”,但将“雷电手机搜索”这个产品独立发布出来的意义要远远大于只在360手机助手内提供搜索服务,独立发布出来能让更多没有安装360手机助手的用户使用,也是360手机助手获取新用户的一个渠道。

  “雷电手机搜索”简单到只是一个面向手机资源的垂直搜索,但用户会在意这些吗?用户只在意这个产品是否好用,按照 360 团队对产品的要求和产品的打磨能力,获取用户不是一件难事。

  无论是豌豆荚百宝袋还是“雷电手机搜索”,从用户的角度来说,获取整个互联网内容的成本降低和流程简化,用户能得到更好的用户体验,这才是真正的用户需求。本文转自站帮网,如需转载请注明地址:http://www.zhanhelp.com/thread-274407-1-1.html

    
[3] 在ubuntu12.04停安装JDK
    来源: 互联网  发布时间: 2014-02-18
在ubuntu12.04下安装JDK
ctrl+alt+t  打开命令行
首先激活Root密码,因为要使用sudo命令必须首先激活root密码

root passwd root 
Step1:
# 去oracle官网下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
 我是64位linux系统,所以下载了 jdk-7u21-linux-x64.tar.gz
# 将解压好的jdk1.7.0_21文件夹用最高权限复制到/usr/lib/jvm目录里
sudo cp -r ~/jdk1.7.0_21/ /usr/lib/jvm/

为jdk1.7.0_21目录增加权限
chmod +rwx jdk1.7.0_01 -R
 
Step2:
# 配置环境变量
sudo gedit ~/.profile
在末尾加上:
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_21

然后保存关闭,使用source更新下
$ source ~/.profile

使用env命令察看JAVA_HOME的值
$ env
如果JAVA_HOME=/usr/lib/jvm/jdk1.7.0_21,说明配置成功。

Step3:
# 将系统默认的jdk修改过来
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_21/bin/java 300 

输入sun jdk前的数字就好了
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_21/bin/javac 300 

$ sudo update-alternatives --config java 
$ sudo update-alternatives --config javac

Step4:
然后再输入java -version,看到如下信息,就说明改成sun的jdk了:
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) Server VM (build 23.0-b21, mixed mode)
 

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3