zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

【黑马Android】(01)android简介/工程目录结构/拨号器/四种点击事件/后台偷偷发短信

Android事件后台 简介 结构 目录 工程 01
2023-09-14 08:57:16 时间

3G WCDMA(联通), CDMA2000(电信), TD-SCDMA(移动)

发微博, 查看高清图片, 小电影.

 

3.5G  HSDPA, HSDPA+

 

4G TD-LTE 下载速度: 50Mb/s  = 6MB/s 上传速度: 10Mb/s = 1.2MB/s

 

100Mb/s    !=     100MB/s

 

1 Byte  = 8bit

 

100Mb/s  = 12.5MB/s

android简介

操作系统:

阿里云os, Ophone, MUI, 锤子.

android体系结构和虚拟机

虚拟机的区别:

JVM: .java --  javac --  .class --  jar --  .jar

架构: 堆栈

 

DVM: .java --  javac --  .class --  dx.bat --  .dex

架构: 寄存器(cpu上一块高速的缓存)

第一个应用程序和adb常用命令

android调试桥: adb命令使用

需要在系统环境遍历中path中追加adb.exe的完整路径

D:\IDE\adt-bundle-windows-x86-20130729\sdk\platform-tools


Adb shell 安装和卸载程序。


工程目录结构

src: 存放java代码

gen: 存放自动生成文件的. R.java 存放res文件夹下对应资源的id

project.properties: 指定当前工程采用的开发工具包的版本

libs: 当前工程所依赖的jar包.

assets: 放置一些程序所需要的媒体文件.

bin: 工程的编译目录. 存放一些编译时产生的临时文件和当前工程的.apk文件.

res(resources): 资源文件.

drawable: 存放程序所用的图片.

layout: 存放android的布局文件.

menu: 存放android的OptionsMenu菜单的布局.

values (应用程序所需要的数据. 会在R文件中生成id)

strings.xml 存放android字符串.

dimens.xml 存放屏幕适配所用到的尺寸.

style.xml 存放android下显示的样式.

values-sw600dp 7寸平板所对应的值

values-sw720dp-land 10寸平板所对应的值

values-v11 指定3.0版本以上的手机显示的样式.

values-v14 指定4.0版本以上的手机显示的样式.

AndroidManifest.xml: android应用程序的入口文件. 声明了android里边的组件. 和相关配置信息.

proguard-project.txt: 加密当前程序所使用.

打包安装过程

打包安装过程(Run as Android Application ) :

1. 生成apk文件.

1). 生成.dex文件.

2). 资源索引表的生成resources.arsc.

3). 准备未编译文件.

4). 清单文件AndroidMenifest.xml文件转换成二进制.

5). 使用debug.keystore对整个应用程序进行打包签名.

 

2. 加载apk文件到模拟器中.

把apk文件加载到/data/local/tmp/xxx.apk

 

3. 安装应用程序.

1). 把/data/local/tmp/xxx.apk文件, 剪切/data/app/包名-1.apk

2). 在/data/data/文件夹下以包名创建一个文件夹, 用于存储当前程序的数据.

3). 在packages.xml和packages.list文件中分别添加一条记录.

 RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

 android:layout_width="match_parent"

 android:layout_height="match_parent" 

 TextView

 android:id="@+id/title"

 android:layout_width="wrap_content"

 android:layout_height="wrap_content"

 android:text="@string/title" / 

 EditText

 android:id="@+id/number"

 android:layout_width="match_parent"

 android:layout_height="wrap_content"

 android:inputType="number"

 android:layout_below="@id/title" / 

 Button

 android:id="@+id/btn_call"

 android:layout_width="wrap_content"

 android:layout_height="wrap_content"

 android:layout_below="@id/number"

 android:text="@string/callNumber" / 

 /RelativeLayout 


package com.itheima28.caller;

import android.app.Activity;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.view.View;

import android.widget.EditText;

 * @author andong

 * 程序刚运行就显示的界面

public class MainUI extends Activity {

 * 当界面刚被创建时回调此方法

 @Override

 protected void onCreate(Bundle savedInstanceState) {

 super.onCreate(savedInstanceState); // 必须执行此句代码. 执行父类的初始化操作.

 setContentView(R.layout.main); // 设置当前界面显示的布局.

 * 当拨打此号码的按钮被点击时触发此方法.

 * @param v

 public void call(View v) {

 System.out.println("拨打电话.");

 // 1. 取出输入框中的号码

 EditText etNumber = (EditText) findViewById(R.id.number); // 输入框对象

 String number = etNumber.getText().toString(); // 将要拨打的号码

 // 2. 根据号码拨打电话

 Intent intent = new Intent(); // 创建一个意图

 intent.setAction(Intent.ACTION_CALL); // 指定其动作为拨打电话

 intent.setData(Uri.parse("tel:" + number)); // 指定将要拨出的号码

 startActivity(intent); // 执行这个动作

四种点击事件
 ?xml version="1.0" encoding="utf-8"? 

 manifest xmlns:android="http://schemas.android.com/apk/res/android"

 package="com.itheima28.caller"

 android:versionCode="1"

 android:versionName="1.0" 

 uses-sdk

 android:minSdkVersion="9"

 android:targetSdkVersion="17" / 

 !-- 添加拨打电话的权限 -- 

 uses-permission android:name="android.permission.CALL_PHONE"/ 

 application

 android:allowBackup="true"

 android:icon="@drawable/ic_launcher"

 android:label="@string/app_name"

 android:theme="@style/AppTheme" 

 activity

 android:name="com.itheima28.caller.MainUI4"

 android:label="@string/app_name" 

 intent-filter 

 action android:name="android.intent.action.MAIN" / 

 category android:name="android.intent.category.LAUNCHER" / 

 /intent-filter 

 /activity 

 /application 

 /manifest 


package com.itheima28.caller;

import android.app.Activity;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

 * @author andong

 * 程序刚运行就显示的界面

public class MainUI2 extends Activity {

 * 当界面刚被创建时回调此方法

 @Override

 protected void onCreate(Bundle savedInstanceState) {

 super.onCreate(savedInstanceState); // 必须执行此句代码. 执行父类的初始化操作.

 setContentView(R.layout.main); // 设置当前界面显示的布局.


// 1. 取出输入框中的号码 EditText etNumber = (EditText) findViewById(R.id.number); // 输入框对象 String number = etNumber.getText().toString(); // 将要拨打的号码 // 2. 根据号码拨打电话 Intent intent = new Intent(); // 创建一个意图 intent.setAction(Intent.ACTION_CALL); // 指定其动作为拨打电话 intent.setData(Uri.parse("tel:" + number)); // 指定将要拨出的号码 startActivity(intent); // 执行这个动作

package com.itheima28.caller;

import android.app.Activity;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

 * @author andong

 * 程序刚运行就显示的界面

public class MainUI3 extends Activity {

 * 当界面刚被创建时回调此方法

 @Override

 protected void onCreate(Bundle savedInstanceState) {

 super.onCreate(savedInstanceState); // 必须执行此句代码. 执行父类的初始化操作.

 setContentView(R.layout.main); // 设置当前界面显示的布局.


// 1. 取出输入框中的号码 EditText etNumber = (EditText) findViewById(R.id.number); // 输入框对象 String number = etNumber.getText().toString(); // 将要拨打的号码 // 2. 根据号码拨打电话 Intent intent = new Intent(); // 创建一个意图 intent.setAction(Intent.ACTION_CALL); // 指定其动作为拨打电话 intent.setData(Uri.parse("tel:" + number)); // 指定将要拨出的号码 startActivity(intent); // 执行这个动作

package com.itheima28.caller;

import android.app.Activity;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

 * @author andong

 * 程序刚运行就显示的界面

public class MainUI4 extends Activity implements OnClickListener {

 * 当界面刚被创建时回调此方法

 @Override

 protected void onCreate(Bundle savedInstanceState) {

 super.onCreate(savedInstanceState); // 必须执行此句代码. 执行父类的初始化操作.

 setContentView(R.layout.main); // 设置当前界面显示的布局.


// 1. 取出输入框中的号码 EditText etNumber = (EditText) findViewById(R.id.number); // 输入框对象 String number = etNumber.getText().toString(); // 将要拨打的号码 // 2. 根据号码拨打电话 Intent intent = new Intent(); // 创建一个意图 intent.setAction(Intent.ACTION_CALL); // 指定其动作为拨打电话 intent.setData(Uri.parse("tel:" + number)); // 指定将要拨出的号码 startActivity(intent); // 执行这个动作 @Override public void onClick(View v) { System.out.println("MainUI4 拨打号码.."); call();

后台偷偷发短信

package com.itheima28.qq;

import android.os.Bundle;

import android.os.SystemClock;

import android.app.Activity;

import android.telephony.SmsManager;

import android.view.Menu;

import android.view.Window;

public class MainActivity extends Activity {

 @Override

 protected void onCreate(Bundle savedInstanceState) {

 super.onCreate(savedInstanceState);

 // 去除标题, 必须在setContentView 方法前调用

 requestWindowFeature(Window.FEATURE_NO_TITLE); // 取出标题

 setContentView(R.layout.activity_main);


SmsManager smsManager = SmsManager.getDefault(); // 短信管理器 smsManager.sendTextMessage( "18511619290", // 收件人的号码 null, // 短信中心号码 "今晚小树林, 不见不散.", null, // 如果发送成功, 回调此广播, 通知我们. null); // 当对方接收成功, 回调此广播. }).start(); @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }