美文网首页
定制三:apk 霸屏模式

定制三:apk 霸屏模式

作者: momxmo | 来源:发表于2020-06-28 22:37 被阅读0次

一、需求:

客户要求从后天获取霸屏 app list,在打开apk的时候,apk要进入霸屏模式,即隐藏虚拟按键和状态栏,下拉状态栏。 并且在3s内连续点击屏幕8下弹出退出霸屏模式选择界面。

二、分析:

其实解决方法也很简单,刚开始做的是隐藏虚拟按键和状态栏;但是这样apk不能全屏显示,所以还是需要动态控制状态栏和导航栏的height;
修改的代码比较多,只简单说下关键的地方

三、代码分析

1、PhoneWindowManager.java 主要是获取屏幕点击操作,计算点击次数

frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
 public void onDown() {
 +                                               System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
+                                               mHits[mHits.length - 1] = SystemClock.uptimeMillis();
+                                               if (mHits[0] >= (SystemClock.uptimeMillis() - DURATIONS)) {
+                                               mHits = new long[5];//重新初始化数组
+                                               SystemProperties.set("persist.neo.isbaping","false");
+                                               Settings.System.putInt(mContext.getContentResolver(), PHONE_STATUS_
+                                               }

 }

2、需要从后台获取 霸屏模式 的app 列表;
这个需要和后台对接;将设备SN传给后台,等待返回的数据,中间会有网络延迟,需要做下处理。获取到的数据存储在SharedPreferences。

 public static int getInstallAuthority() {
        try {
            String sn = android.os.Build.SERIAL;
            Log.i("InstallController---SN", sn);
            JSONObject body = new JSONObject();
            body.put("sn", sn);
            URL url = new URL(urlPath);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            DataOutputStream os = new DataOutputStream(conn.getOutputStream());
            String content = String.valueOf(body);
            os.writeBytes(content);
            os.flush();
            os.close();
            int responseCode = conn.getResponseCode();
            Log.i("InstallController", String.valueOf(responseCode));
            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStreamReader in = new InputStreamReader(conn.getInputStream());
                BufferedReader bf = new BufferedReader(in);

                String inputLine;
                StringBuilder response = new StringBuilder();
                while ((inputLine = bf.readLine()) != null) {
                    response.append(inputLine);
                }
                applist = response.toString();              
                JSONObject jsonResponse = new JSONObject(response.toString());
                JSONObject dataJsonObject = jsonResponse.getJSONObject("data");
                int installAuthority = dataJsonObject.getInt("installAuthority");
                Log.i("InstallController", "installAuthority --" + installAuthority);
                in.close();
                conn.disconnect();
                return installAuthority;
            }
        } catch (Exception e) {
            Log.e("InstallController", "InstallController --Exception--" + e.toString());
        }
        return NOT_GET_NET_AUTHORITY;
    }

3、动态隐藏导航栏状态栏的高度,这个比较简单

frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
status_bar_height
navigation_bar_height
navigation_bar_height_landscape
navigation_bar_width

只需要修改上面几个参数即可;
另外如果要单独只是动态隐藏导航栏,状态栏。需要另外操作,不详细列举。

**

四、双指触摸退出霸屏模式

主要是在getPointerCount() 中加逻辑判断

frameworks/base/core/java/android/view/MotionEvent.java
     public final int getPointerCount() {
+
+
+   if("true".equals(SystemProperties.get("persist.neo.isbaping")) 
+       && nativeGetPointerCount(mNativePtr) == 2 
+       && "true".equals(SystemProperties.get("persist.neo.pointerCount"))
+       && "false".equals(SystemProperties.get("persist.neo.openBaping"))){
+       System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
+       mHits[mHits.length - 1] = SystemClock.uptimeMillis();
+       SystemProperties.set("persist.neo.pointerCount","false");
+       Log.e("lyl","mHits[mHits.length - 1]" +mHits[mHits.length - 1]);
+       Log.e("lyl"," mHits[0] " +mHits[0]+ "   " + SystemClock.uptimeMillis() );
+        if (mHits[0] >= (SystemClock.uptimeMillis() - DURATIONS)) {
+       //if (SystemClock.uptimeMillis() - mHits[0] <= DURATIONS) {  
+           Log.e("lyl","getPointerCount33333" );
+           mHits = new long[7];
+           SystemProperties.set("persist.neo.openBaping","true");                               
+                                            
+       }
+   }
         return nativeGetPointerCount(mNativePtr);

相关文章

  • 定制三:apk 霸屏模式

    一、需求: 客户要求从后天获取霸屏 app list,在打开apk的时候,apk要进入霸屏模式,即隐藏虚拟按键和状...

  • 为什么需要万词快排霸屏系统OEM定制?

    为什么需要万词快排霸屏系统OEM定制? 1、市场价格由自己决定,不受任何别人限制。 2、享受万词快排霸屏系统升级,...

  • 除了刘雯、倪妮,我才知道江疏影也这么会拍照片~

    文:by 蛋蛋xi @华韬旅居定制师 最近肤白貌美大长腿本人江疏影女同学真是有点霸屏的模式啊,两部电视剧同时热映,...

  • 网赚新手:这12个工具,您值得收藏。

    网赚工具…… 就近工具,犹如日程霸屏,日历霸屏,邮件群发……不知道财富了多少荷包。 工具,有点小用,搭配个好的模式...

  • 给简书挖个坑

    简书最近被程序员霸屏了 首页满篇都是程序员的学习笔记 开始是iOS,现在JAVA开启霸屏模式 自己发表的文章永远都...

  • 小埋怨

    当其它,别的城市被困顿于,三天两头的暴雨倾盆徘徊不定模式的时候,我所在小镇的气候,依然是酷热霸屏的模式,...

  • 高弹手技球@铭泽霸屏特训班收获

    高弹手技球@铭泽霸屏特训班收获 高弹手技球将借助铭泽霸屏思维霸屏,今天这个信念特别强烈,我坚信感叹手技球能霸屏。 ...

  • adb实用命令

    截屏: windows批处理命令: linux(MAC)命令: 安装APK: 卸载apk: 清理app缓存: 安卓...

  • chrome主页&书签定制

    chrome允许客户主页和书签,通过ContentProvider获取定制的信息,定制APK源码位置:packag...

  • 指尖模式下的霸屏

    量变的基础下运用技巧实现质的突破是自媒体人内容变现的基础。无论从百度搜索的运营技术还是自媒体载体的霸屏术都是种“暴...

网友评论

      本文标题:定制三:apk 霸屏模式

      本文链接:https://www.haomeiwen.com/subject/liacxktx.html