文档章节

去广告APP学习笔记1

 明丶泽
发布于 2015/05/16 22:19
字数 604
阅读 43
收藏 0
APP

#去广告APP学习笔记1

目的是分析APP结构和各个部分的作用

##APP结构

###Settings.java

public class Settings extends SherlockFragmentActivity {}

public class SherlockFragmentActivity extends Watson implements OnActionModeStartedListener, OnActionModeFinishedListener {}

####SherlockFragmentActivity 的作用

关于碎片里面ActionBar的初始化,实现ActionMode的开始和结束。

实现Sherlock这个ActionBar的生命周期的设置,在watson里实现了Sherlock menu 的 handling,包括点击事件的处理和菜单的维护

####Settings 的作用

1.从UI设置里获取了一个轻量级存储类ui_preference,存入uiPref中,并根据uiPref里的值设置主题

public void onCreate(Bundle savedInstanceState) {
        
	    uiPref = getSharedPreferences("ui_preference", MODE_PRIVATE);
	    boolean themeDark = uiPref.getBoolean("theme_dark", false);
	    if(themeDark) {
	        setTheme(R.style.MinMinTheme);
	    }													
		super.onCreate(savedInstanceState);

2.调用了LogFragment中的消息处理器handler

pref = getSharedPreferences(getPackageName() + "_preferences", MODE_WORLD_READABLE);
LogFragment.mHandler = new Handler();
        

插入LogFragment的解析

###LogFragment.java

LogFragment初始化了一个SherlockFragment,在其中维护了一个后台运行的线程

public class LogFragment extends SherlockFragment {
    static public Handler mHandler;
    public void refresh() {
        tvLog.setText("");
        tvLog.append("Log\n");
        tvLog.append("===========\n");
        
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                
                List<String> progs = new ArrayList<String>();
                Context context = getActivity();
                final String pname = "tw.fatminmin.xposed.minminguard";
                
                //检查READ_LOGS权限是否获取
                if (context.getPackageManager().checkPermission(android.Manifest.permission.READ_LOGS, pname) != 0) {
                    if (android.os.Build.VERSION.SDK_INT >= 16) {
                        progs.add("su");
                        progs.add("-c");
                        progs.add("pm grant tw.fatminmin.xposed.minminguard android.permission.READ_LOGS");
                        
                        //在这个APP的运行环境里开一个进程执行上面添加的指令代码
                        try {
                            Process proc = Runtime.getRuntime().exec(progs.toArray(new String[progs.size()]));
                            proc.waitFor();
                        }
                        catch (Exception e) {
                            e.printStackTrace();
                            return;
                        }
                    }
                }
                                

APP在这个线程中向安卓系统获取了READ_LOGS的权限

progs.clear();
                progs.add("logcat");
                
                //获取日志
                progs.add("-d");    
                
                //设置默认过滤器
                progs.add("-s");
                
                //设置过滤器内容
                progs.add(Util.tag);    //tag 的内容为SafeGuard
                
                //执行指令
                try {
                    Process proc = Runtime.getRuntime().exec(progs.toArray(new String[progs.size()]));
                    
                    //构造BufferedReader,使它从InputStreamReader中读取1024个字节的数据
                    BufferedReader bufferedReader = new BufferedReader(
                    
                            //从进程proc中获取输入流,绑定到InputStreamReader上
                            new InputStreamReader(proc.getInputStream()), 1024);
                            
                    String line; 
                    
                    //从BufferedReader里逐行读取,直到将BufferedReader读空
                    while ((line = bufferedReader.readLine())!= null) {   
                        
                        if(line.contains("beginning of /dev/log")) {
                            continue;
                        }
                        
                        final String msg = line;
                        
                        //发送一个可执行对象到线程,执行:在textView tvlog中打印line
                        mHandler.post(new Runnable() {
                            @Override
                            public void run() {
                                tvLog.append(msg);   
                                tvLog.append("\n");
                            }
                        });
                    }
                    
                    bufferedReader.close();
                    proc.destroy();
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            tvLog.append("===========\nEnd of log");
                        }
                    });
                    
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

LogFragment的主要作用是打印

PrefsFragment的作用是实现搜索,刷新APP列表的模块

public class PrefsFragment extends SherlockFragment {
    
    static public ListView listView;
    
    private CheckBoxAdapter mAdapter;
    private EditText search;
    private List<Map<String, Object>> itemList;
    
    public void refresh() {
        setupAppList();
        mAdapter = new CheckBoxAdapter(getActivity(), itemList);
        listView.setAdapter(mAdapter);
        setupSearch();
    }

刷新itemList,绑定CheckBoxAdapter,在碎片中显示出来

Settings.java在LogFragment和PrefsFragment两种模式下维护了选项菜单

© 著作权归作者所有

粉丝 0
博文 2
码字总数 1787
作品 0
程序员
私信 提问
加载中

评论(1)

APP或网站/微信【注册决定成败】市场调查分析:目前80%的用户是因为注册短信验证码体验不佳,从而放弃注册!这是多么痛的领悟-----我公司是专业做短信验证码的供应商,6年间我们只做了一件事让每个用户注册短信验证码5秒到达,为近16000APP客户提供服务! 加我微-信: wkk-555 咨询,〔廖经理136-4173-0373〕!
作为一名Android APP开发者的自我总结

每当接近年尾,最痛苦的工作无疑是写年终总结,写总结的同时不禁感叹这一年过得不容易阿。突然想起这一年也是自己开发Android APP的第一年,于是觉得应该给自己的APP来一个年终总结。 一、开...

拉偶有所依
2015/01/08
188
2
我就是靠这个软件实现第2职业的

今天我来分享一下我是如何利用印象笔记来做个人知识管理的。 (以下内容都是基于印象笔记来做的解说,虽然没拿钱,但是广告嫌疑很大,如有不适,请自行脑补替换成其他的软件) 如果你之前没有...

彭小六
2016/04/05
0
0
小程序已死?我们拭目以待吧

微信小程序于1于9日正式上线,上线的时候我写了一篇文章《微信小程序刷爆朋友圈的秘密》,当然那几天也是吵得最热闹的几天。从我的文章中,我对小程序是看好的。 当然那几天各路媒体也都悉数...

anda0109
2017/03/09
0
0
实用的IT类网站及工具整理

1.聚合数据 大家在开发过程中,可能会用到各种各样的数据,想找一些接口来提供一些数据。比如天气预报查询,火车时刻表查询,彩票查询,身份证查询等等。有了这个接口,直接调用即可。各种各...

剑dh
2016/10/19
386
1
刚刚汉化了一个app——NoteBox V1.0汉化版---随机阅读笔记的app

NoteBox V1.0汉化版---随机阅读笔记的app 大小:950KB 软件性质:免费无广告 软件简介: NoteBox 可以创建和编辑笔记. NoteBox 可以随机的展示你的笔记给你阅读. NoteBox 功能作用: -保存心里...

egaokiss
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

uni app 零基础小白到项目实战

$emit 子组件传给父组件$ref 父组件操作子组件 公用模板 uni-app全局变量的几种实现方法 const websiteUrl = 'http'const now = Date.now || function() { return new Date().getTime......

达达前端小酒馆
17分钟前
4
0
Tomcat是如何实现异步Servlet的

前言 通过我之前的Tomcat系列文章,相信看我博客的同学对Tomcat应该有一个比较清晰的了解了,在前几篇博客我们讨论了Tomcat在SpringBoot框架中是如何启动的,讨论了Tomcat的内部组件是如何设...

木木匠
42分钟前
16
0
mysql中间件分享(Mysql-prxoy,Atlas,DBProxy,Amoeba,cobar,TDDL)

hello 各位小伙伴大家好,我是小栈君,这期我们分享关于mysql中间件的研究,也就是数据层的读写分离和负载均衡,希望能够在实际的应用中能够帮助到各位小伙伴。 下期我们将继续分享go语言的系...

IT干货栈
今天
10
0
OSChina 周一乱弹 —— 人生,还真是到处是意外

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享lil peep的单曲《High School》 《High School》- lil peep 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
650
10
Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部