0%

简介

本文基于Python2.7

这篇文章基于我在慕课网上面学习Python简单爬虫写的内容,教程内容是爬取1000条百度百科的数据,但是教程中爬虫截止2018-01-27已经失效,刚好看到大神gityuan.com的内容,于是用Python实现爬取其网页内容并生成json数据。

本文即上述过程整理。

本文涉及源代码已上传github(点这里查看)。

阅读全文 »

简介

通过自定义Dialog类,使用Style、AnimationDrawable等实现一个透明背景的、带进度更新的弹窗。

主要涉及Style自定义以及AnimationDrawable的使用。

代码

  • 布局文件
阅读全文 »

简介

最近手机中涉及到用户账户密码保存的问题,选用AES加密算法进行加密后,再通过SharedPreferences保存在手机端。

本文主要介绍AES的加密、解密用法。

代码

初始化秘钥

阅读全文 »

注解,是描述Java代码的代码,它能够被编译器解析,向编译器、虚拟机说明一些事情,就像java中给程序员看的注释一样

Android应用开发这方面比较火的是Butter Knife ,本文讲述如何自定义注解替换findViewById()。

实现注解(annotation)的思路:通过反射获取到类中使用注解的变量,方法,再调用不同的方法对这些变量,方法进行处理以达到目的。

主要涉及三方面:

  • 定义一个注解类
  • 定义一个注解帮助类
  • 使用注解
阅读全文 »

基于Python3.x

Python文件默认格式.py

首行默认以下命令:

1
2
#!/usr/bin/python
# -*- coding: UTF-8 -*-

数据类型

阅读全文 »

简介

反射,用来在运行时获取给定类的构造函数,变量,方法,并对其作以修改,而不必在编译时获取该类。

Reflection allows programmatic access to information about the fields, methods and constructors of loaded classes, and the use of reflected fields, methods, and constructors to operate on their underlying counterparts, within security restrictions.

https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/package-summary.html

简单使用

定义一个待反射的类ATestClass.java

阅读全文 »

简介

hook是钩子的意思,hook的过程是通过反射、代理等改变系统原有的行为以达到自己的目的。

本文主要是通过hook android 中的ActivityManagerService和Handler.CallBack,欺骗系统调起activity的过程,在调用startActivity时将targetIntent通过proxy伪装为proxyIntent,等到通过系统验证,正式启动activity时,再讲proxyIntent恢复为targetIntent,从而实现调用未在AndroidManifest.xml中注册的activity。

需要注意,本方法只在Api<26下有效。具体原因见后面。

具体实现

阅读全文 »

启动一个Service

  • MyServices.java

    必须继承自Service,或者如IntentService本身就是等其子类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public class MyServices extends Service {

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
    Log.d("TAG","onBind");
    return null;
    }

    @Override
    public void onCreate() {
    super.onCreate();
    Log.d("TAG","onCreate");
    }

    @Override
    public void onDestroy() {
    super.onDestroy();
    Log.d("TAG", "onDestroy: ");
    }
    }
  • AndroidManifest.xml

    注册MyServices

    1
    2
    3
    4
    5
    6
    7
    8
    <application>
    <service android:name=".MyServices"
    android:exported="true">
    <intent-filter>
    <action android:name="cf.android666.myservices" />
    </intent-filter>
    </service>
    </application>
  • MainActivity.java

    在java中调用Service,需要ServiceConnection

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ServiceConnection mConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
    Log.d(TAG, "onServiceConnected: 服务绑定");
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
    Log.d(TAG, "onServiceDisconnected: 服务解绑");
    }
    };
    Intent intent = new Intent(context, MyServices.class);
    bindService(intent, mConnection, Service.BIND_AUTO_CREATE);//绑定Service
    //startService(intent); 启动service
    unbindService(mConnection);//解绑Service

    bindService()startService()的区别在于:

    ** bindService()将service和当前的activity绑定在一起,activity销毁时,service也会被销毁;

    ** startService()则只是“启动”service,在此后service的活动和activity无关,并一直存活。

Service具体分析

Service在AndroidManifest.xml中的属性:

1
2
3
4
android:name=".MyService"//必须被指定
android:exported=true/false //是否能被其他应用隐式调用
//有intent-filter则默认为true,否则默认false;若手动指定为false则即使有intent-filter也无法隐式调用
android:process="remote"/":remote"//前者在共有的进程中进行,后者在名字为{packageName}:remote 的私有进程中进行,其他进行不可访问;如果不设置该属性,则service在应用自己的进程里面运行
阅读全文 »

在之前学习android的过程中,跟着教程做了几个app,虽然随着使用的api的失效,大多数应用如今已经不能正常使用了,但是作为初入编程的一点点小纪念,还是为他们写一个索引文章,至少能够晚一些消寂于这广阔的数据海洋中。

NiceNews

Posted on 2016-05-30

NieceNews我制作的第二款APP,一个实时新闻软件。

NiceNews

阅读全文 »

这几天的工作中用到了控件组来实现复杂布局,效果不错,记录下来备用。

1. 定义控件组布局xxx_layout.xml

在这里定义要使用的控件组布局,这里的布局决定了布局显示的样子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">

<ImageView
... />

<EditText
.../>

<ImageView
... />

</LinearLayout>

2.新建自定义属性文件attr.xml(可选)

阅读全文 »