1、如何创建一个新的Activity
AndroidManifest.xml 文件中的细节
[1] android的四大组件全部需要在主清单文件中配置
[2] 如果你想要让你的app存在多个启动图标,那么这几个图标对应的App这样配
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
[3] Activity标签的下的icon和label属性可以和Application标签下的icon和label不一样,如果在activity下具体指定了加载的图标,那么就会在加载这个Activity的时候加载属于这个Activity的icon和label,如果不存在,那么就会加载Application的icon和label
[4] 一般一个App只需要一个启动图标,其它的Activity都是从页面转过去
2、隐式意图
[1] 定义:通过指定一组动作或者数据并通过应用的意图过滤器,来执行指定的动作
[2] 步骤:
- Demo:
// [1] 获取意图对象
Intent intent = new Intent();
// [2] 设置意图动作
intent.setAction("aa");
intent.addCategory("android.intent.category.DEFAULT");
// [3] 设置数据
// intent.addCategory("com.young.intent");
// [4] 开启意图
startActivity(intent);
<!--在添加intent-filter的时候必须指定category不然会报错-->
<activity android:name=".TestActivity">
<intent-filter>
<action android:name="aa"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
3、显式意图
[1] 定义:直接指定具体的包名和类名
//【1】 通过构造方法直接执行意图
Intent intent = new Intent(this, TestActivity.class);
startActivity(intent);
[2] 总结
[1] 开启自己应用的界面使用显式意图
[2] 开启其他的应用(系统应用使用隐式意图
[3] 显式意图更安全一些
4、人品计算器案例
主要内容
//最重要的是这一块
Intent intent = new Intent(this, ResultActivity.class);
intent.putExtra("name",name);
intent.putExtra("sex",sex);
startActivity(intent);
Intent intent = getIntent();
String name = intent.getStringExtra("name");
int sexValue = intent.getIntExtra("sex", 0);
5、短信大全案例
[1]使用隐式意图传送数据
Intent intent = new Intent();
intent.setAction("android.intent.action.SEND");
intent.addCategory("android.intent.category.DEFAULT");
intent.setType("text/plain");
intent.putExtra("sms_body",message);
startActivity(intent);
[2] 使用系统上层应用代码的过程
(1) 首先点击系统的功能,然后使用monitor进行监视,找到相关的组件
(2) 通过这个组件名,在AndriodiManfest.xml文件中找到相关的activity的intent-filter节点,找到可能的类型,然后复制下来
(3) 将意图的属性设置好,
Intent intent = new Intent();
intent.setAction("android.intent.action.SEND");
intent.addCategory("android.intent.category.DEFAULT");
intent.setType("text/plain");
intent.putExtra("sms_body",message);
startActivity(intent);
(4)转到相关的应用
6、短信发送器案例
代码如下
Maintivity.java
package com.smssender;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.util.ArrayList;
public class MainActivity extends Activity implements View.OnClickListener {
private Button btn_get_phone;
private Button btn_send;
private Button btn_insert;
private EditText et_phone;
private EditText et_content;
private final int GET_PHONE_NUMBER = 1;
private final int GET_INSERT_CONTENT = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_get_phone = (Button)findViewById(R.id.btn_get_phone);
btn_send = (Button)findViewById(R.id.btn_send);
btn_insert = (Button)findViewById(R.id.btn_insert);
et_phone = (EditText)findViewById(R.id.et_number);
et_content = (EditText)findViewById(R.id.et_content);
btn_get_phone.setOnClickListener(this);
btn_send.setOnClickListener(this);
btn_insert.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Intent intent = null;
switch (view.getId()){
case R.id.btn_get_phone :
intent = new Intent(this, ContactActivity.class);
startActivityForResult(intent,GET_PHONE_NUMBER);
break;
case R.id.btn_insert :
intent = new Intent(this, TemplateActivity.class);
startActivityForResult(intent,GET_INSERT_CONTENT);
break;
case R.id.btn_send :
String phone = et_phone.getText().toString().trim();
String content = et_content.getText().toString().trim();
SmsManager manager = SmsManager.getDefault();
ArrayList<String> msgs = manager.divideMessage(content);
for(String msg : msgs){
manager.sendTextMessage(phone,null,msg,null,null);
}
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
switch(requestCode){
case GET_PHONE_NUMBER :
String phone = data.getStringExtra("phone");
et_phone.setText(phone);
break;
case GET_INSERT_CONTENT :
String content = data.getStringExtra("content");
et_content.setText(content);
break;
}
}
}
}
TemplateActivity.java
package com.smssender;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
/**
* Created by young on 2016/11/27.
*/
public class TemplateActivity extends Activity {
private String modes[] = new String[]{"你好正在开会,请稍后再拨","你好正在打架,请稍后再拨","你好正在玩游戏,请稍后再拨","你好正在开运动会,请稍后再拨","你好正在约会,请稍后再拨","你好正在开会,请稍后再拨"};
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_template);
lv = (ListView) findViewById(R.id.lv_template);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.template_item,modes);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String msg = modes[i];
Intent intent = new Intent();
intent.putExtra("content",msg);
setResult(RESULT_OK,intent);
finish();
}
});
}
}
contractActivity.java
package com.smssender;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by young on 2016/11/27.
*/
public class ContactActivity extends Activity {
private List<People> lists = new ArrayList<>();
private ListView lv_contact;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
lv_contact = (ListView)findViewById(R.id.lv_contact);
initList();
Myadapter adapter = new Myadapter();
lv_contact.setAdapter(adapter);
lv_contact.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String phone = lists.get(i).getPhone();
Intent intent = new Intent();
intent.putExtra("phone",phone);
setResult(RESULT_OK,intent);
finish();
}
});
}
private void initList() {
for(int i = 0;i < 20;i++){
People people = new People();
people.setName("张三");
people.setPhone("11"+i++);
lists.add(people);
}
}
private class Myadapter extends BaseAdapter{
@Override
public int getCount() {
return lists.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View view1 = null;
if(view == null){
view1 = View.inflate(getApplicationContext(),R.layout.contact_item,null);
}else{
view1 = view;
}
TextView tv_name = (TextView)view1.findViewById(R.id.tv_name);
TextView tv_phone = (TextView) view1.findViewById(R.id.tv_phone);
String phone = lists.get(i).getPhone();
String name = lists.get(i).getName();
tv_name.setText(name);
tv_phone.setText(phone);
return view1;
}
}
}
7、Activity的生命周期
以一个Activity的启动关闭为线索说一下
打开应用的过程 onCreate->onStart->onResume
关闭Activity onPause->onStop->onDestroy(当应用退出的时候,其他时候只到onStop)
重新打开Activity onRestart->onStart
8、横竖屏切换Activity的生命周期
在不指定
android
:screenOrientation=
"portrait"的时候,在横竖屏切换的时候相当于退出应用然后重新开启,
如果指定旋转方式的话,就 不会出现生命周期波动
9、Activity的四种启动模式
standard 新建一个Activity就会将其添加进任务栈
singleTop 在新建一个activity的时候,系统会检查在栈顶是不是存在一个这样的实例,如果存在那么会复用这个实例
singleTask
在新建一个activity的时候,系统会检查整个任务栈是不是存在一个这样的实例,如果存在那么会复用这个实例
singleInstance 在指定这个启动模式的时候,这个Activity会被系统单独加到一个新的任务栈中