Android基础练习
来源:互联网 发布:郑州淘宝网店加盟查封 编辑:程序博客网 时间:2024/06/07 05:13
1.自定义Toast
步骤,首先需要添加一个自定义的toast布局,然后通过构造方法实例化一个Toast对象即可
public void onToast(View view) { //1.加载自定义布局 LayoutInflater layoutInflater = LayoutInflater.from(this); View view1 = layoutInflater.inflate(R.layout.toast_laout, null); //创建对象 Toast toast = new Toast(this); //设置自定义布局 toast.setView(view1); //设置显示时间 toast.setDuration(Toast.LENGTH_SHORT); //设置位置 toast.setGravity(Gravity.CENTER, 0, 0); //显示 toast.show(); }
2.移动的小球
步骤,创建一个继承自View绘图的类DrawView,获取组件并显示
DrawView.java
package com.example.movball;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * Created by y0n on 2017/5/9. */public class DrawView extends View{ public float currentX = 40; public float currentY = 50; //创建画笔 Paint p = new Paint(); public DrawView(Context context) { super(context); } public DrawView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 设置画笔颜色 p.setColor(Color.RED); // 绘制小圆 canvas.drawCircle(currentX, currentY, 15, p); } @Override public boolean onTouchEvent(MotionEvent event) { //修改X,Y的属性 currentX = event.getX(); currentY = event.getY(); //通知当前组件重绘自己 invalidate(); //返回true表明已经处理该时间 return true; }}
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取容器 LinearLayout root = (LinearLayout) findViewById(R.id.activity_main); //创建DrawView组件 DrawView drawView = new DrawView(this); //设置自定义组件大小 drawView.setMinimumWidth(300); drawView.setMinimumHeight(500); root.addView(drawView); }
3.打电话发短信
步骤,添加布局及控件,再使用Intent发送意图
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.example.phonecall.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/edt1" android:layout_weight="3" android:hint="在这里输入电话号码" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/btn1" android:layout_weight="1" android:onClick="callphone" android:text="打电话" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> <EditText android:id="@+id/edt2" android:hint="在这里输入短信内容" android:lines="10" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/btn2" android:onClick="sendsms" android:text="发短信" android:layout_width="wrap_content" android:layout_height="wrap_content"/></LinearLayout>
package com.example.phonecall;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.telephony.SmsManager;import android.view.View;import android.widget.EditText;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void callphone(View view){ //获取电话号码 EditText editText = (EditText)findViewById(R.id.edt1); String num = editText.getText().toString(); //1.创建Intent对象,封装数据,传递数据 Intent intent = new Intent(); //2.设置打电话动作 intent.setAction(Intent.ACTION_CALL); //3.封装数据打包到Intent中 //按照打电话的规定格式 Uri uri = Uri.parse("tel:" + num); intent.setData(uri); //4.根据Intent传递的动作,启动应用 startActivity(intent); } public void sendsms(View view){ //1.获取电话号码 EditText editText = (EditText) findViewById(R.id.edt1); String num = editText.getText().toString(); //2.获取短信内容 EditText editText1 = (EditText)findViewById(R.id.edt2); String content = editText1.getText().toString(); //3.获取短信管理器对象 SmsManager smsManager = SmsManager.getDefault(); //4.拆分短信 ArrayList<String> smss = smsManager.divideMessage(content); //5.发送短信 smsManager.sendMultipartTextMessage(num,null,smss,null,null); }}
4.ListViewBaseAdapter
listview实现方式有使用ArrayAdapter,BaseAdapter,SimpleAdapter,实现步骤大致相同,先获取数据源,然后再创建适配器,再显示到控件中
BaseAdapter例子如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.baseadapterlistview.MainActivity"> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="#f00" android:dividerHeight="2dp" android:headerDividersEnabled="false"> </ListView></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.baseadapterlistview.MainActivity"> <ImageView android:id="@+id/logo" android:src="@mipmap/ic_launcher" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:paddingLeft="12dp" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="5"> <TextView android:id="@+id/title" android:text="qqMusic" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/version" android:text="1.0.1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/size" android:text="30.2M" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <Button android:layout_weight="1" android:layout_gravity="right" android:id="@+id/uninstall" android:text="卸载" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
package com.example.baseadapterlistview;import android.app.Activity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by y0n on 2017/5/16. */public class MyListAdapter extends BaseAdapter{ private static final String TAG = "sc"; List<Map<String, Object>> list = new ArrayList<>(); Activity mactivity; public MyListAdapter(Activity activity) { mactivity = activity; Map<String, Object> map = new HashMap<>(); map.put("logo", R.mipmap.ic_launcher); map.put("title", "qqMusic"); map.put("version", "版本"); map.put("size", "大小"); Map<String, Object> map1 = new HashMap<>(); map1.put("logo", R.mipmap.ic_launcher); map1.put("title", "百度"); map1.put("version", "版本"); map1.put("size", "大小"); Map<String, Object> map2 = new HashMap<>(); map2.put("logo", R.mipmap.ic_launcher); map2.put("title", "阿里"); map2.put("version", "版本"); map2.put("size", "大小"); list.add(map); list.add(map1); list.add(map2); } public void InitList() { } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //1.获取布局加载器 LayoutInflater layoutinflater = mactivity.getLayoutInflater(); //2.获取view对象 //方式一 //View view = LayoutInflater.from(mactivity).inflate(R.layout.item,null); //方式二 View view = layoutinflater.inflate(R.layout.item,null); //3.获取view中的控件对象 ImageView logo = (ImageView) view.findViewById(R.id.logo); TextView title = (TextView) view.findViewById(R.id.title); TextView version = (TextView) view.findViewById(R.id.version); TextView size = (TextView) view.findViewById(R.id.size); //4.设置控件信息 Map<String, Object> map = list.get(position); logo.setImageResource((Integer) map.get("logo")); title.setText((String)map.get("title")); version.setText((String)map.get("version")); size.setText((String)map.get("size")); //5.返回view对象 return view; }}
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1.获取ListView对象 ListView listView = (ListView) findViewById(R.id.lv); //2.创建适配器 MyListAdapter adapter = new MyListAdapter(this); adapter.InitList(); //3.关联listView对象 listView.setAdapter(adapter); }}
5.Login
步骤,编写布局及控件,实现控件响应
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.inner.MainActivity"> <EditText android:id="@+id/edt_usr" android:textSize="20dp" android:hint="在此输入用户名" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/edt_pass" android:textSize="20dp" android:hint="在此输入密码" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:orientation="horizontal" android:id="@+id/liner" android:layout_width="wrap_content" android:layout_height="wrap_content"> <CheckBox android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/checkbox_usr" android:text="记住用户名" android:textSize="20dp"/> <CheckBox android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/checkbox_pass" android:text="记住密码" android:textSize="20dp"/> </LinearLayout> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btn1" android:textSize="20dp" android:text="登录" android:onClick="login"/></LinearLayout>
package com.example.inner;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.CheckBox;import android.widget.EditText;import android.widget.Toast;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1.加载文件中的用户信息 String string = loadUserAndPass(); if (string == null) { return ; } //2.拆分用户名和密码,进行设置 String[] userInfo = string.split("##"); EditText edituser = (EditText) findViewById(R.id.edt_usr); EditText editpass = (EditText) findViewById(R.id.edt_pass); edituser.setText(userInfo[0]); editpass.setText(userInfo[1]); } public String loadUserAndPass() { //1.获取路径 //String path = "data/data/com.bluelesson.inner/info.txt"; String path = "data/data/"+ getPackageName() +"/info.txt"; // 2. 创建文件对象, 判断是否已经存在,不存在直接退出 File file = new File(path); //File file = getFilesDir(); if (!file.exists()){ Toast.makeText(this, "用户配置文件不存在", Toast.LENGTH_SHORT).show(); return null; } //3.加载用户信息 String strings = null; try{ FileInputStream fileInputStream = new FileInputStream(file); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream)); strings = bufferedReader.readLine(); fileInputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return strings; } public void saveUserAndPass(String user, String pass) { // 保存用户名和密码,保存到安装的app目录下 // 1. 获取路径 String path = "data/data/com.example.inner/info.txt"; //2.创建文件对象 File file = new File(path); //3.将用户信息写入到文件对象中 String info = user + "##" + pass; //使用文件输出流写入到文件对象中 try{ FileOutputStream fileoutputStream = new FileOutputStream(file); fileoutputStream.write(info.getBytes()); fileoutputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void login(View view) { //1.获取用户名 EditText editUser = (EditText) findViewById(R.id.edt_usr); EditText editPass = (EditText) findViewById(R.id.edt_pass); String user = editUser.getText().toString(); String pass = editPass.getText().toString(); //2.判断是否一致 if (user.equals(pass)) { Toast.makeText(this, "登录成功!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "登录失败!", Toast.LENGTH_SHORT).show(); } //3.判断是否需要保存 CheckBox checkBoxUser = (CheckBox) findViewById(R.id.checkbox_usr); CheckBox checkBoxPass = (CheckBox) findViewById(R.id.checkbox_pass); if (checkBoxUser.isChecked() || checkBoxPass.isChecked()){ saveUserAndPass(user, pass); } }}
6.文件读写
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.example.filechangemod.MainActivity"> <Button android:text="私有方式" android:textSize="20sp" android:onClick="onClick" android:id="@+id/btn_private" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:text="追加方式" android:textSize="20sp" android:onClick="onClick" android:id="@+id/btn_append" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:text="全局读方式" android:textSize="20sp" android:onClick="onClick" android:id="@+id/btn_global_read" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:text="全局写方式" android:textSize="20sp" android:onClick="onClick" android:id="@+id/btn_global_write" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:text="全局读写方式" android:textSize="20sp" android:onClick="onClick" android:id="@+id/btn_global_rw" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:text="读取文件" android:textSize="20sp" android:onClick="onClickRead" android:id="@+id/btn_read" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:text="保存sp数据" android:textSize="20sp" android:onClick="save" android:id="@+id/btn_save" android:layout_width="match_parent" android:layout_height="wrap_content"/></LinearLayout>
package com.example.filechangemod;import android.content.Context;import android.content.SharedPreferences;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Toast;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onClick(View view) { int id = view.getId(); String name = ""; int mode = 0; switch (id){ case R.id.btn_private: name = "private.txt"; mode = Context.MODE_PRIVATE; break; case R.id.btn_append: name = "append.txt"; mode = Context.MODE_APPEND; break; case R.id.btn_global_read: name = "global_read.txt"; mode = Context.MODE_WORLD_READABLE; break; case R.id.btn_global_write: name = "global_write.txt"; mode = Context.MODE_WORLD_WRITEABLE; break; case R.id.btn_global_rw: name = "global_wr.txt"; mode = Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE; break; } try{ FileOutputStream fileOutputStream = openFileOutput(name, mode); fileOutputStream.write("文件信息:".getBytes()); fileOutputStream.write(name.getBytes()); fileOutputStream.write(mode); fileOutputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void save(View view){ SharedPreferences sharedPreferences = getSharedPreferences("lock", Context.MODE_WORLD_READABLE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("password", "hello"); editor.commit(); Toast.makeText(this, "editor.commit()", Toast.LENGTH_SHORT).show(); } public void onClickRead(View view) { String name = "private.txt"; try{ FileInputStream fileInputStream = openFileInput(name); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream)); String info = bufferedReader.readLine(); bufferedReader.close(); fileInputStream.close(); Toast.makeText(this, info, Toast.LENGTH_SHORT).show(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
7.sqlite
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.sqlite.MainActivity"> <Button android:text="创建数据库" android:onClick="create_database" android:textSize="20sp" android:id="@+id/btn_create_database" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:text="更新数据库" android:onClick="update_database" android:textSize="20sp" android:id="@+id/btn_update_database" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:text="添加数据" android:onClick="add_data" android:textSize="20sp" android:id="@+id/btn_add" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:text="删除数据" android:onClick="delete_data" android:textSize="20sp" android:id="@+id/btn_delete" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:text="更新数据" android:onClick="update_data" android:textSize="20sp" android:id="@+id/btn_update" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:text="查询数据" android:onClick="select_data" android:textSize="20sp" android:id="@+id/btn_select" android:layout_width="match_parent" android:layout_height="wrap_content"/></LinearLayout>
package com.example.sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;/** * Created by y0n on 2017/5/17. */public class DBHelper extends SQLiteOpenHelper { private static final String TAG = "DBHelper"; public DBHelper(Context context, String name){ super(context, name, null, 1); } public DBHelper(Context context, String name, int version){ super(context, name, null, version); } public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { Log.d(TAG, "onCreate"); // 创建数据库中的表信息 String sql = "create table user(id int,name varchar(20))"; // 执行sql语句 db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.d(TAG, "onUpgrade"); }}
package com.example.sqlite;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Toast;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void create_database(View view) { //1.创建一个sqlite数据版主类对象 DBHelper dbHelper = new DBHelper(this, "test_db"); //2.创建并打开数据库 SQLiteDatabase db = dbHelper.getReadableDatabase(); if (db.isOpen()) { Toast.makeText(this, "创建数据库成功!", Toast.LENGTH_SHORT).show(); } //3.关闭数据库 db.close(); } public void update_database(View view) { //1.创建一个sqlite数据的版主类对象 DBHelper dbHelper = new DBHelper(this, "test_db"); //2.创建并打开数据库 SQLiteDatabase db = dbHelper.getReadableDatabase(); //3.关闭数据库 db.close(); } public void add_data(View view) { //1.打开数据库,获取数据库对象 DBHelper dbHelper = new DBHelper(this, "test_db"); SQLiteDatabase db = dbHelper.getReadableDatabase(); if (db.isOpen()) { //2.添加数据 ContentValues values = new ContentValues(); values.put("id", "1001"); values.put("name", "北京"); db.insert("user", null, values); values.put("id", "1002"); values.put("name", "上海"); db.insert("user", null, values); values.put("id", "1003"); values.put("name", "深圳"); db.insert("user", null, values); values.put("id", "1004"); values.put("name", "广州"); db.insert("user", null, values); //3.关闭数据库 db.close(); Toast.makeText(this, "数据插入成功!", Toast.LENGTH_SHORT).show(); } } public void delete_data(View view) { //1.打开数据库,获取数据库对象 DBHelper dbHelper = new DBHelper(this, "test_db"); SQLiteDatabase db = dbHelper.getReadableDatabase(); if (db.isOpen()) { //2.删除数据 db.delete("user", "id=?", new String []{"1002"}); //3.关闭数据库 db.close(); Toast.makeText(this, "删除数据成功!", Toast.LENGTH_SHORT).show(); } } public void update_data(View view) { //1.打开数据库,获取数据库对象 DBHelper dbHelper = new DBHelper(this, "test_db"); SQLiteDatabase db = dbHelper.getReadableDatabase(); if (db.isOpen()) { //2.更新数据 ContentValues values = new ContentValues(); values.put("name", "成都"); db.update("user", values, "id=?", new String []{"1003"}); //3.关闭数据库 db.close(); Toast.makeText(this, "更新数据成功!", Toast.LENGTH_SHORT).show(); } } public void select_data(View view) { //1.打开数据库,获取数据库对象 DBHelper dbHelper = new DBHelper(this, "test_db"); SQLiteDatabase db = dbHelper.getReadableDatabase(); //2.返回数据集 Cursor cursor = db.query("user", new String[]{"id", "name"}, null, null, null, null, null); //3.遍历数据 int count = cursor.getCount(); if (count <= 0) return ; cursor.moveToFirst(); do { String[] cols = cursor.getColumnNames(); String id = cursor.getString(0); String name = cursor.getString(1); Toast.makeText(this, "id="+ id +",name="+name, Toast.LENGTH_SHORT).show(); }while(cursor.moveToNext()); //3.关闭数据库 db.close(); }}
8.KeyEvent
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.keyevent.MainActivity"> <TextView android:textSize="20sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!"/> <EditText android:inputType="textPassword" android:id="@+id/edt" android:textSize="20sp" android:hint="在此输入数据" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/btn" android:text="登录" android:onClick="onClick" android:textSize="20sp" android:layout_width="match_parent" android:layout_height="wrap_content"/></LinearLayout>
package com.example.keyevent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Base64;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.View;import android.widget.Toast;public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; byte[] byPassword = new byte[20]; char[] chAscii = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; char[] chPassword = new char[20]; int count = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Toast.makeText(this, "onKeyDown"+event.getAction(), Toast.LENGTH_SHORT).show(); return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (count > 20) return super.onKeyUp(keyCode,event); if (keyCode >= 7 && keyCode <= (7+9)) { byPassword[count] = (byte)(keyCode-7); chPassword[count] = chAscii[byPassword[count]]; count++; } else if (count != 0 && keyCode == 38) { count--; } Toast.makeText(this, "onKeyUP:"+(keyCode-7)+event.getAction(), Toast.LENGTH_SHORT).show(); return super.onKeyUp(keyCode, event); } @Override public boolean onTouchEvent(MotionEvent event) { Toast.makeText(this, "onTouchEvent"+event.getAction(), Toast.LENGTH_SHORT).show(); return super.onTouchEvent(event); } public void onClick(View view) { String password = String.copyValueOf(chPassword, 0, count); String encode = Base64.encodeToString(password.getBytes(), 0); byte[] decode = Base64.decode(encode, 0); Toast.makeText(this, "password:"+encode, Toast.LENGTH_SHORT).show(); Toast.makeText(this, "password:"+decode, Toast.LENGTH_SHORT).show(); }}
public class SDcardReceiver extends BroadcastReceiver { public SDcardReceiver() { } @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving String action = intent.getAction(); if (action.equals("android.intent.action.MEDIA_MOUNTED")){ Log.v("sdCard", "sd卡就绪"); } else if (action.equals("android.intent.action.MEDIA_UNMOUNTED")){ Log.v("sdCard", "sd卡被移除"); } else if (action.equals("android.intent.action.MEDIA_REMOVED")){ Log.v("sdCard", "sd卡被拔出"); } }}
10.APP监听
package com.example.applisten;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.net.Uri;import android.util.Log;public class MyAPPInstallReceiver extends BroadcastReceiver { public MyAPPInstallReceiver() { } @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving Uri uri = intent.getData(); String action = intent.getAction(); if (action.equals("action.intent.action.PACKAGE_ADDED")){ Log.v("APPReceiver", uri + "被安装了"); } else if (action.equals("action.intent.action.PACKAGE_REPLACED")){ Log.v("APPReceiver", uri + "被更新了"); } else if (action.equals("action.intent.action.PACKAGE_REMOVED")){ Log.v("APPReceiver", uri + "被卸载了"); } }}
11.SMSReceiver
public class smsHookReceiver extends BroadcastReceiver { public smsHookReceiver() { } @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving Bundle bundle = intent.getExtras(); Object[] objects = (Object[])bundle.get("pdus"); for (int i = 0; i < objects.length; i++) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[])objects[i]); String sms = smsMessage.getMessageBody(); Toast.makeText(context, "sms:" + sms, Toast.LENGTH_SHORT).show(); String num = smsMessage.getOriginatingAddress(); Toast.makeText(context, "num:" + num, Toast.LENGTH_SHORT).show(); } }}
12.PhoneListen
package com.example.phonelisten;import android.app.Service;import android.content.Context;import android.content.Intent;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.util.Log;public class MyService extends Service { private final String TAG = "MyService"; private TelephonyManager tm; private MyPhoneStateListener listener; public MyService() { } @Override public void onDestroy() { Log.d(TAG, "onDestroy"); super.onDestroy(); tm.listen(listener, PhoneStateListener.LISTEN_NONE); } @Override public void onCreate() { super.onCreate(); tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); listener = new MyPhoneStateListener(); tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); } @Override public IBinder onBind(Intent intent) { return null; } private class MyPhoneStateListener extends PhoneStateListener{ @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state){ case TelephonyManager.CALL_STATE_IDLE: Log.d(TAG, "电话闲置"); break; case TelephonyManager.CALL_STATE_RINGING: Log.d(TAG, "电话响铃"); break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.d(TAG, "电话接听"); break; } } }}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.localselectperson.MainActivity"> <Button android:id="@+id/btn_1" android:textSize="20sp" android:onClick="onStartService" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="绑定服务"/> <Button android:id="@+id/btn_11" android:textSize="20sp" android:onClick="onStopService" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="解绑服务"/> <EditText android:id="@+id/edit_query" android:hint="在此输入您的ID" android:textSize="20sp" android:inputType="number" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/btn_3" android:textSize="20sp" android:onClick="onSelect" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="查询信息"/> <TextView android:id="@+id/show_text" android:textSize="20sp" android:layout_width="match_parent" android:layout_height="wrap_content"/></LinearLayout>
package com.example.localselectperson;/** * Created by y0n on 2017/5/19. */public interface IPerson { public String queryNameByID(int id);}
package com.example.localselectperson;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;public class MyService extends Service { MyBinder binder; public MyService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. return binder; } @Override public void onCreate() { super.onCreate(); binder = new MyBinder(); } class MyBinder extends Binder implements IPerson{ String[] mStrings = {"张山", "里斯", "王五", "找刘", "前期"}; @Override public String queryNameByID(int id) { if (id < 0 || id >= 4) { return "查入此人"; } return mStrings[id]; } } @Override public void onDestroy() { super.onDestroy(); if (binder != null){ binder = null; } }}
package com.example.localselectperson;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.IBinder;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity { private Intent mIntent; private MyServiceConn conn; MyService.MyBinder mMyBinder = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onStartService(View view) { mIntent = new Intent(this, MyService.class); conn = new MyServiceConn(); bindService(mIntent, conn, BIND_AUTO_CREATE); Toast.makeText(this, "绑定完成", Toast.LENGTH_SHORT).show(); } public void onStopService(View view) { unbindService(conn); stopService(mIntent); mMyBinder = null; Toast.makeText(this, "mMyBinder = null", Toast.LENGTH_SHORT).show(); } public void onSelect(View view){ EditText editText = (EditText)findViewById(R.id.edit_query); String id = editText.getText().toString(); if (id.length() > 7) { Toast.makeText(this, "长度不能超过7", Toast.LENGTH_SHORT).show(); return; } if (mMyBinder != null) { String name = mMyBinder.queryNameByID(Integer.parseInt(id)); TextView textView = (TextView) findViewById(R.id.show_text); textView.setText(name); } else { TextView textView = (TextView) findViewById(R.id.show_text); textView.setText("没有开启服务"); } } private class MyServiceConn implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) { mMyBinder = (MyService.MyBinder) service; } @Override public void onServiceDisconnected(ComponentName name) { //非正常情况下bind服务断开时或被杀死时调用 mMyBinder = null; } }}
14.APPManager
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.appmanager.MainActivity"> <Button android:id="@+id/btn_all" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="所有应用" android:onClick="onAllAPK"/> <Button android:id="@+id/btn_system" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="系统应用" android:onClick="onSysAPK"/> <Button android:id="@+id/btn_third" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="第三方应用" android:onClick="onThirdAPK"/></LinearLayout>
<?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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="20dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingStart="20dp" android:paddingTop="20dp" tools:context="com.example.appmanager.ActivityAllApk"> <TextView android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="所有应用程序" android:textSize="20sp" /> <ListView android:id="@+id/list_all_apk" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:divider="#f00" android:dividerHeight="2dp"/></LinearLayout>
<?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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="20dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingStart="20dp" android:paddingTop="20dp" tools:context="com.example.appmanager.ActivitySystemApk"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="系统应用程序" android:textSize="20sp" /> <!--<RelativeLayout--> <!--android:layout_width="match_parent"--> <!--android:layout_height="wrap_content"--> <!--android:layout_marginTop="10dp"--> <!--android:orientation="vertical">--> <!--<TextView--> <!--android:layout_width="wrap_content"--> <!--android:layout_height="wrap_content"--> <!--android:layout_alignParentLeft="true"--> <!--android:text="已用:458MB"--> <!--android:textSize="20dp" />--> <!--<TextView--> <!--android:layout_width="wrap_content"--> <!--android:layout_height="wrap_content"--> <!--android:layout_alignParentRight="true"--> <!--android:text="可用:12GB"--> <!--android:textSize="20dp" />--> <!--</RelativeLayout>--> <ListView android:id="@+id/list_system_apk" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:elevation="1dp" android:divider="#f00" android:dividerHeight="2dp"/></LinearLayout>
<?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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="20dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingStart="20dp" android:paddingTop="20dp" tools:context="com.example.appmanager.ActivityThirdApk"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="第三方应用程序" android:textSize="20sp" /> <ListView android:descendantFocusability="blocksDescendants" android:id="@+id/list_third_apk" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:elevation="1dp" android:divider="#f00" android:dividerHeight="2dp"/></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/im_icon" android:layout_width="50dp" android:layout_height="50dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="20dp" android:orientation="vertical" android:layout_marginLeft="20dp" android:layout_weight="3"> <TextView android:id="@+id/tv_appname" android:layout_width="match_parent" android:layout_height="match_parent" android:text="程序名:" android:textSize="20sp" /> <TextView android:id="@+id/tv_apppackge" android:layout_width="match_parent" android:layout_height="match_parent" android:text="包名:" android:textSize="13sp" /> </LinearLayout> <Button android:focusable="false" android:id="@+id/btn_uninstall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="卸载" /> </LinearLayout></LinearLayout>
package com.example.appmanager;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;public class MainActivity extends AppCompatActivity { //刷新//直接点击按钮响应 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onAllAPK(View view) { Intent intentALL = new Intent(MainActivity.this, ActivityAllApk.class); startActivity(intentALL); } public void onSysAPK(View view) { Intent intentSys = new Intent(MainActivity.this, ActivitySystemApk.class); startActivity(intentSys); } public void onThirdAPK(View view) { Intent intentThird = new Intent(MainActivity.this, ActivityThirdApk.class); startActivity(intentThird); }}
package com.example.appmanager;import android.content.Context;import android.content.Intent;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;import android.graphics.drawable.Drawable;import android.net.Uri;import java.util.ArrayList;import java.util.List;/** * Created by y0n on 2017/5/20. */public class GetAppsinfo { public static final int FILTER_ALL_APP = 0; // 所有应用程序 public static final int FILTER_SYSTEM_APP = 1; // 系统程序 public static final int FILTER_THIRD_APP = 2; // 第三方应用程序 private Context mContext = null; private PackageManager mPackageManager = null; private List<AppsInfo> mAppsInfoList = new ArrayList<AppsInfo>(); public GetAppsinfo(Context mContext) { this.mContext = mContext; // PackageManager 类表示已安装的应用程序信息 mPackageManager = mContext.getPackageManager(); } public List<AppsInfo> filterApp(int filter){ //查询所有已经安装的应用程序 List<ApplicationInfo>applicationInfos= mPackageManager.getInstalledApplications( PackageManager.GET_UNINSTALLED_PACKAGES); mAppsInfoList.clear(); switch (filter){ case FILTER_ALL_APP: { for (ApplicationInfo applicationInfo: applicationInfos ){ getApkInfo(applicationInfo); } } break; case FILTER_SYSTEM_APP: { for (ApplicationInfo applicationInfo : applicationInfos) { if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { getApkInfo(applicationInfo); } } } break; case FILTER_THIRD_APP: { for (ApplicationInfo applicationInfo : applicationInfos) { // 非系统应用 if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { getApkInfo(applicationInfo); } // 系统应用,但更新后变成不是系统应用了 else if ((applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { getApkInfo(applicationInfo); } } } break; } return mAppsInfoList; } private void getApkInfo(ApplicationInfo app){ AppsInfo appsInfo = new AppsInfo(); // 获取应用名称 String appName = app.loadLabel(mPackageManager).toString(); String packageName = app.packageName; // 包名 Drawable drIcon = app.loadIcon(mPackageManager); // 图标 appsInfo.setStrApkName(appName); appsInfo.setStrPackageName(packageName); appsInfo.setDrIcon(drIcon); mAppsInfoList.add(appsInfo); System.out.println("程序名:" + appName + " 包名:" + packageName); } //卸载 public void unInstall(String strPackgeName){ Intent intent = new Intent(Intent.ACTION_DELETE); intent.setData(Uri.parse("package:"+ strPackgeName)); mContext.startActivity(intent); }}
package com.example.appmanager;import android.graphics.drawable.Drawable;/** * Created by y0nz1 on 2017/5/19. */public class AppsInfo { String strApkName; //程序名 String strPackageName; //包名 Drawable drIcon; //图标 public Drawable getDrIcon() { return drIcon; } public void setDrIcon(Drawable drIcon) { this.drIcon = drIcon; } public String getStrApkName() { return strApkName; } public void setStrApkName(String strApkName) { this.strApkName = strApkName; } public String getStrPackageName() { return strPackageName; } public void setStrPackageName(String strPackageName) { this.strPackageName = strPackageName; } public AppsInfo(Drawable drIcon, String strApkName, String strPackageName) { this.drIcon = drIcon; this.strApkName = strApkName; this.strPackageName = strPackageName; } public AppsInfo() { }}
package com.example.appmanager;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;/** * Created by y0n on 2017/5/19. */public class APKAdapter extends BaseAdapter { List<AppsInfo> mAppsInfoList = new ArrayList<AppsInfo>(); Context mContext; public APKAdapter(List<AppsInfo> mAppsInfoList, Context mContext) { this.mAppsInfoList = mAppsInfoList; this.mContext = mContext; } @Override public int getCount() { return mAppsInfoList.size(); } @Override public Object getItem(int position) { return mAppsInfoList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; View view = null; //1.当 covertView 为空时(第一次调用) if (convertView == null){ //1.获取布局加载器 LayoutInflater layoutInflater = LayoutInflater.from(mContext); //2.获取 view 对象 view = layoutInflater.inflate(R.layout.item,null); //3.获取 item 中的控件对象 viewHolder = new ViewHolder(view); view.setTag(viewHolder); }else { view = convertView; viewHolder = (ViewHolder) view.getTag(); } //2.将信息显示都界面上 AppsInfo appsInfo = (AppsInfo) getItem(position); viewHolder.mImIcon.setImageDrawable(appsInfo.getDrIcon()); viewHolder.mTvAppName.setText(appsInfo.getStrApkName()); viewHolder.mTvAppPackge.setText(appsInfo.getStrPackageName()); return view; } public class ViewHolder{ ImageView mImIcon = null; TextView mTvAppName = null; TextView mTvAppPackge = null; public ViewHolder(View view){ mImIcon = (ImageView) view.findViewById(R.id.im_icon); mTvAppName = (TextView) view.findViewById(R.id.tv_appname); mTvAppPackge = (TextView) view.findViewById(R.id.tv_apppackge); } }}
package com.example.appmanager;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.ListView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;import static com.example.appmanager.GetAppsinfo.FILTER_ALL_APP;public class ActivityAllApk extends AppCompatActivity { private long mid; private String packgename; private List<AppsInfo> mAppsInfoList; private GetAppsinfo apkinfo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_all_apk); // 1. 获取 ListView 对象 ListView listView = (ListView) findViewById(R.id.list_all_apk); // 2. 创建适配器 mAppsInfoList = new ArrayList<AppsInfo>(); // 3. 获取APk信息 apkinfo = new GetAppsinfo(getApplicationContext()); mAppsInfoList = apkinfo.filterApp(FILTER_ALL_APP); APKAdapter adapter = new APKAdapter(mAppsInfoList, getApplicationContext()); // 3. 关联 listView 对象 listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.v("apkinfo", "uninstall"); mid = id; Button button = (Button) view.findViewById(R.id.btn_uninstall); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { packgename = mAppsInfoList.get((int) mid).getStrPackageName(); String appname = mAppsInfoList.get((int) mid).getStrApkName(); apkinfo.unInstall(packgename); Toast.makeText(v.getContext(), "将卸载" + appname, Toast.LENGTH_SHORT).show(); } }); } }); }}
package com.example.appmanager;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.ListView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;import static com.example.appmanager.GetAppsinfo.FILTER_SYSTEM_APP;public class ActivitySystemApk extends AppCompatActivity { private long mid; private String packgename; private List<AppsInfo> mAppsInfoList; private GetAppsinfo apkinfo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_system_apk); // 1. 获取 ListView 对象 ListView listView = (ListView) findViewById(R.id.list_system_apk); // 2. 创建适配器 mAppsInfoList = new ArrayList<AppsInfo>(); // 3. 获取APk信息 apkinfo = new GetAppsinfo(getApplicationContext()); mAppsInfoList = apkinfo.filterApp(FILTER_SYSTEM_APP); APKAdapter adapter = new APKAdapter(mAppsInfoList, getApplicationContext()); // 3. 关联 listView 对象 listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.v("apkinfo", "uninstall"); mid = id; Button button = (Button) view.findViewById(R.id.btn_uninstall); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { packgename = mAppsInfoList.get((int)mid).getStrPackageName(); String appname = mAppsInfoList.get((int)mid).getStrApkName(); apkinfo.unInstall(packgename); Toast.makeText(v.getContext(), "将卸载" + appname, Toast.LENGTH_SHORT).show(); } }); } }); }}
package com.example.appmanager;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.ListView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;import static com.example.appmanager.GetAppsinfo.FILTER_THIRD_APP;import static com.example.appmanager.R.layout.activity_third_apk;public class ActivityThirdApk extends AppCompatActivity { private List<AppsInfo> mAppsInfoList; private String packgename; private long mid; private View mview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(activity_third_apk); // 1. 获取 ListView 对象 ListView listView = (ListView) findViewById(R.id.list_third_apk); // 2. 创建适配器 mAppsInfoList = new ArrayList<AppsInfo>(); // 3. 获取APk信息 final GetAppsinfo apkinfo = new GetAppsinfo(getApplicationContext()); mAppsInfoList = apkinfo.filterApp(FILTER_THIRD_APP); APKAdapter adapter = new APKAdapter(mAppsInfoList, getApplicationContext()); // 3. 关联 listView 对象 listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.v("apkinfo", "uninstall"); mid = id; Button button = (Button) view.findViewById(R.id.btn_uninstall); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { packgename = mAppsInfoList.get((int)mid).getStrPackageName(); String appname = mAppsInfoList.get((int)mid).getStrApkName(); apkinfo.unInstall(packgename); Toast.makeText(v.getContext(), "将卸载" + appname, Toast.LENGTH_SHORT).show(); } }); } }); }}
15.获取html源码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.htmlsourceviewplus.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/btn" android:text="访问hao123网页源码" android:textSize="20sp" android:onClick="openurl" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/btn_cancel" android:onClick="cancel" android:text="取消执行" android:textSize="20sp" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> <SeekBar android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/seekBar"/> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv_text" android:layout_width="match_parent" android:layout_height="match_parent" android:text="Hello World!"/> </ScrollView></LinearLayout>
package com.example.htmlsourceviewplus;import android.os.AsyncTask;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.SeekBar;import android.widget.TextView;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;public class MainActivity extends AppCompatActivity { private Button mBtnOpenUrl; private Button mBtnCancel; private SeekBar mSeekBar; private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtnOpenUrl = (Button) findViewById(R.id.btn); mBtnCancel = (Button) findViewById(R.id.btn_cancel); mSeekBar = (SeekBar) findViewById(R.id.seekBar); mTextView = (TextView) findViewById(R.id.tv_text); mBtnOpenUrl.setEnabled(true); mBtnCancel.setEnabled(false); } public void openurl(View view) { MyAyncTask myAyncTask = new MyAyncTask(); myAyncTask.execute("http://www.hao123.com"); mBtnOpenUrl.setEnabled(false); mBtnCancel.setEnabled(true); } public void cancel(View view) { mBtnOpenUrl.setEnabled(true); mBtnCancel.setEnabled(false); } //异步任务 private class MyAyncTask extends AsyncTask<String, Integer, String>{ //初始化UI @Override protected void onPreExecute() { super.onPreExecute(); mSeekBar.setProgress(0); mSeekBar.setMax(100); mTextView.setText("loading ..."); } //后台操作 @Override protected String doInBackground(String... params) { try { // 1. 构造URL对象 String path = params[0]; URL url = new URL(path); // 2. 创建一个URL连接对象 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); // 3. 设置URL的请求模式或者其他信息 urlConnection.setRequestMethod("GET"); urlConnection.setConnectTimeout(5000); urlConnection.setRequestProperty("Accept-Encoding", "identity"); // 4. 请求数据,获取返回码 int code = urlConnection.getResponseCode(); // 200 OK 302 found 404 not fount 500 内部错误 if (code == 200) { // 获取内容长度,需要指定RequestProperty int nMaxLen = urlConnection.getContentLength(); int nLen = 0; // 4.1 读取信息 InputStream inputStream = urlConnection.getInputStream(); byte[] bytes = new byte[50]; int iReadSize = 0; // 创建字节流对象,用于保存输入流的信息 ByteArrayOutputStream byteObj = new ByteArrayOutputStream(); while (iReadSize != -1) { // 循环读取数据信息,每次读取1024字节,会自动移动指针 // 第二个参数指的值字节数组的起始偏移 iReadSize = inputStream.read(bytes, 0, 50); if (iReadSize == -1) break; // 计算已经读取的长度 nLen += iReadSize; // 更新进度 this.publishProgress((int) (((float) nLen / (float) nMaxLen) * 100)); byteObj.write(bytes, 0, iReadSize); } inputStream.close(); //获取字符 String strings = new String(byteObj.toByteArray()); return strings; } } catch (Exception e) { e.printStackTrace(); } return null; } //更新进度 @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); mSeekBar.setProgress(values[0]); } //处理返回信息 @Override protected void onPostExecute(String s) { super.onPostExecute(s); mTextView.setText(s); } }}
16.解析Android清单文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.example.parsemanifast.MainActivity"> <Button android:id="@+id/parsexml" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="解析Manifast" android:onClick="onParseXML" /> <ListView android:id="@+id/listview1" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="#f00" android:dividerHeight="2dp" android:headerDividersEnabled="false"> </ListView></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.parsemanifast.MainActivity" android:orientation="vertical" > <TextView android:text="item" android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
package com.example.parsemanifast;import android.content.res.AssetManager;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserFactory;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.io.StringReader;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends AppCompatActivity { private List<String> tagList; private List<String> retStr; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** * 1.获取文件path,getAssets * 2.打开文件,inputStream * 3.new 一个字符数组 * 4.new一个字符数组输出流对象 * 5.循环读取,read到字符数组输出流对象中 * 6.再转成字符串 * 7.再解析,myXMLParse * 8.创建ui线程显示到界面 */ //读取文件并解析,测试 public void onParseXML(View view) { String xml = null; AssetManager assetManager = getAssets(); try { InputStream inputStream = assetManager.open("manifast.xml"); byte[] bytes = new byte[1024]; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); int nReadSize = 0; while (nReadSize != -1) { nReadSize = inputStream.read(bytes, 0, 1024); if (nReadSize == -1) break; byteArrayOutputStream.write(bytes); } inputStream.close(); xml = new String(byteArrayOutputStream.toByteArray()); //调用标签解析函数 //测试 List<String> listTag = myParseTag(xml); retStr = new ArrayList<>(); int j = 0; for (int i = 0; i < listTag.size(); i ++) { Map<String, String> mapnameval = myParesVat(xml, listTag.get(i)); for (Map.Entry<String, String> entry : mapnameval.entrySet()) { System.out.println("<" + listTag.get(i) + ">:" + "\t" + entry.getKey() + "=" + entry.getValue()); String strTextView = "<" + listTag.get(i) + ">:" + "\t" + entry.getKey() + "=" + entry.getValue(); retStr.add(strTextView); } } } catch (Exception e) { e.printStackTrace(); } //1.获取对象 ListView lv = (ListView) findViewById(R.id.listview1); //2.获取数据 ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.item,R.id.text1, retStr); // setListAdapter(); lv.setAdapter(arrayAdapter); } /** * 1.获取xml解析工厂 * 2.获取xml解析器 * 3.设置解析的文件 * 4.获取事件类型 * 5.循环解析 * 6.getName,保存到list中 * 7.返回List数据为标签列表 */ //解析出标签,保存到List中 public List<String> myParseTag(String xml) { XmlPullParserFactory factory = null; //标签列表 tagList = new ArrayList<>();// //属性列表// attrList = new ArrayList<>();// //属性和值的映射// Map<String, String> attrMap = new HashMap<>();// //属性和值的映射的列表// List<Map<String, String>> attrvalmapList= new ArrayList<>();// //标签和属性的映射// Map<List<String>, Map<String, String>> tagAttrMap = new HashMap<>();// //保存每个映射到列表中// List<Map<String, Map<String, String>>> xmlList = new ArrayList<>();//// List<map《标签,map《属性,值》》> try { factory = XmlPullParserFactory.newInstance(); XmlPullParser xpp = factory.newPullParser(); xpp.setInput(new StringReader(xml)); int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_DOCUMENT) { System.out.println("Start Document"); //tagList.add(xpp.getName()); } else if (eventType == XmlPullParser.START_TAG) { System.out.println("Start tag " + xpp.getName()); tagList.add(xpp.getName()); } else if (eventType == XmlPullParser.END_TAG) { System.out.println("End tag " + xpp.getName()); //tagList.add(xpp.getName()); } eventType = xpp.next(); } return tagList; } catch (Exception e) { e.printStackTrace(); } return null; } //解析标签中的属性 public Map<String, String> myParesVat(String xml, String StrTag) { Map<String, String> attrvalmap = new HashMap<>(); List<Map<String, String>> attrvalmaplist = new ArrayList<>(); XmlPullParserFactory factory = null; try { factory = XmlPullParserFactory.newInstance(); XmlPullParser xpp = factory.newPullParser(); xpp.setInput(new StringReader(xml)); int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_DOCUMENT) { //System.out.println("Start Document"); //tagList.add(xpp.getName()); } else if (eventType == XmlPullParser.START_TAG) { //System.out.println("Start tag " + xpp.getName()); //判断是否等于某个标签 if (StrTag.equals(xpp.getName())) { //循环保存属性和值 if (xpp.getAttributeCount() == 0) { String attrname = "无属性"; String attrval = "无值"; attrvalmap.put(attrname, attrval); attrvalmaplist.add(attrvalmap); } else { for (int i = 0; i < xpp.getAttributeCount(); i++) { String attrname = xpp.getAttributeName(i); String attrval = xpp.getAttributeValue(i); attrvalmap.put(attrname, attrval); //attrvalmaplist.add(attrvalmap); } } return attrvalmap; //return attrvalmaplist; } } else if (eventType == XmlPullParser.END_TAG) { //System.out.println("End tag " + xpp.getName()); //tagList.add(xpp.getName()); } eventType = xpp.next(); } } catch (Exception e) { e.printStackTrace(); } return null; }}
package com.example.jsoup;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.TextView;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private TextView textView; private List<String> content = new ArrayList<>(); //http://m.kugou.com/ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.tv_show); textView.setText("抓取中..."); runSubThread(); } public void runSubThread(){ new Thread(){ @Override public void run() { super.run(); String path = "http://m.kugou.com"; try { Document doc = Jsoup.connect(path).userAgent("Mozilla/5.0 (Linux;" + " Android 6.0;" + " Nexus 5 Build/MRA58N) AppleWebKit/537.36" + " (KHTML, like Gecko) Chrome/58.0.3029.110 Mobile Safari/537.36"). timeout(5000). get(); Elements links = doc.select("a[href]"); Elements media = doc.select("img[src]"); Elements imports = doc.select("link[href]"); System.out.println(String.format("Media:(%d)", media.size())); for (Element src : media) { if (src.tagName().equals("img")){ System.out.println("<img>" + String.format("%s:%s", src.tagName(), src.attr("abs:src"))); content.add("<img>" + String.format("%s:%s", src.tagName(), src.attr("abs:src"))); } } runOnUiThread(new Runnable() { @Override public void run() { for (int i = 0; i < content.size(); i++) textView.setText(content.get(i)); } }); } catch (Exception e) { e.printStackTrace(); } } }.start(); }}
18.使用jsoup解析KuGou
package com.example.getkugoumusic;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.TextView;import org.json.JSONObject;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import java.util.ArrayList;import java.util.List;//1.访问http://m.kugou.com获取网页源码//2.然后通过选择器进行过滤,过滤出歌曲列表中的id属性//3.提取其中的id值为songs_BB8BF48B08C0AEC4F8058EB95C8285B9,提取出其中的hash值//4.构造访问服务器的url = “http://m.kugou.com/app/i/getSongInfo.php?cmd=playInfo&hash=// “+id的hash值 + “&from=mkugou”,采用GET方式发送//5.获取从服务端返回的json格式数据//6.构造歌曲信息java bean对象,解析json数据//7.通过返回的json数据获取其中的歌曲资源的url,访问资源,保存到本地文件中//8.测试文件是否可用。public class MainActivity extends AppCompatActivity { private List<String> strIDList; private List<Document> docsList; private List<KugouMusicInfo> kugouMusicInfosList; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); visitKugou(); textView = (TextView) findViewById(R.id.text1); } //访问http://m.kugou.com获取新歌列表中的li标签的id属性和id值 public void visitKugou(){ //创建线程 new Thread(){ @Override public void run() { super.run(); //定义path String path = "http://m.kugou.com"; try { //使用jsoup连接Kugou,设置代理及超时 Document doc = Jsoup.connect(path).userAgent("Mozilla/5.0 (Linux;" + " Android 6.0;" + " Nexus 5 Build/MRA58N) AppleWebKit/537.36" + " (KHTML, like Gecko) Chrome/58.0.3029.110 Mobile Safari/537.36"). timeout(5000). get(); //设置选择器,查找li标签中的id属性 Elements liID = doc.select("li[id]"); //测试输出 System.out.println(String.format("li:%d", liID.size())); //使用list保存提取出来的strID strIDList = new ArrayList<>(); for (Element li : liID){ if (li.tagName().equals("li")){ System.out.println("<li>" + String.format("%s:%s", li.tagName(), li.attr("id"))); String strID = li.attr("id"); int begin = strID.indexOf("_") + 1; strID = strID.substring(begin, 38); System.out.println(strID); strIDList.add(strID); } } //构造访问服务器的URL采用get方式 //“http://m.kugou.com/app/i/getSongInfo.php?cmd=playInfo&hash= // “+id的hash值 + “&from=mkugou”,采用GET方式发送 //创建一个list保存这个对象 kugouMusicInfosList = new ArrayList<KugouMusicInfo>(); for (int i = 0; i < strIDList.size(); i++) { String strPath = "http://m.kugou.com/app/i/getSongInfo.php?cmd=playInfo&hash=" + strIDList.get(i) + "&from=mkugou"; // docsList = new ArrayList<Document>(); //使用构造好的url访问服务器,并接收返回的json数据,并保存在docList中 Document docs = Jsoup.connect(strPath).userAgent("Mozilla/5.0 (Linux;" + " Android 6.0;" + " Nexus 5 Build/MRA58N) AppleWebKit/537.36" + " (KHTML, like Gecko) Chrome/58.0.3029.110 Mobile Safari/537.36"). timeout(5000). get(); //docsList.add(docs); //创建一个MusicInfo对象 final KugouMusicInfo kugouMusicInfo = new KugouMusicInfo(); //对获取到的docs字符串进行提取,取得json格式数据 String strDocs = docs.toString(); int begin = strDocs.indexOf("<body>") + "<body>".length(); int end = strDocs.indexOf("</body>"); strDocs = strDocs.substring(begin, end); //json解析 //获取json对象 JSONObject jsonObject = new JSONObject(strDocs); //根据key获取value String songName = jsonObject.getString("songName"); kugouMusicInfo.setSongName(songName); String singerName = jsonObject.getString("singerName"); kugouMusicInfo.setSingerName(singerName); String fileSize = jsonObject.getString("fileSize"); kugouMusicInfo.setFileSize(fileSize); String musicUrl = jsonObject.getString("url"); kugouMusicInfo.setMusicUrl(musicUrl); String imgUrl = jsonObject.getString("imgUrl"); kugouMusicInfo.setImgUrl(imgUrl); String extName = jsonObject.getString("extName");//音乐类型 kugouMusicInfo.setExtName(extName); String timeLength = jsonObject.getString("timeLength"); kugouMusicInfo.setTimeLength(timeLength); System.out.println(kugouMusicInfo.toString()); kugouMusicInfosList.add(kugouMusicInfo); //使用ui线程将数据显示在界面上 runOnUiThread(new Runnable() { @Override public void run() { textView.setText(kugouMusicInfo.toString()); } }); } } catch (Exception e) { e.printStackTrace(); } } }.start(); }}
阅读全文
0 0
- Android基础练习
- 基础练习
- 基础练习
- 基础练习
- 基础练习
- 基础练习
- ANDROID基础学习笔记_1.1_练习
- Java:基础练习-循环练习
- 【c基础练习】文件练习
- 【c基础练习】数组基础练习
- Android练习
- android练习
- android基础篇------------java基础(9)(集合的综合练习)
- C++基础练习一
- 基础练习KMP算法
- 基础练习一
- 基础练习二
- c基础练习
- Raft一致性算法论文
- jQuery获取元素的方法
- 洛谷Oj-凌乱的yyy-贪心
- EF之Database First数据库优先
- HTTP_RAW_POST_DATA报错
- Android基础练习
- Field.get(null)
- 文章标题
- 多核CPU上python多线程并行的一个假象
- 展会客流统计的客流统计系统,WiFi客流每时每客
- 一分钟学会 ConstraintLayout 之从属性角度理解布局
- uploadify多图片上传(flash版本)
- swift3.0函数语法 参数 var去掉. 以及inout位置变化
- <C# 6.0 & .NET 4.6 Framework>