第五天

来源:互联网 发布:软件安装包制作 编辑:程序博客网 时间:2024/04/28 00:16
1、如何创建一个新的Activity
    AndroidManifest.xml 文件中的细节
    [1]  android的四大组件全部需要在主清单文件中配置
    [2] 如果你想要让你的app存在多个启动图标,那么这几个图标对应的App这样配
    
  1. <activity android:name=".MainActivity">
  2. <intent-filter>
  3. <action android:name="android.intent.action.MAIN" />
  4. <category android:name="android.intent.category.LAUNCHER" />
  5. </intent-filter>
  6. </activity>
    [3] Activity标签的下的icon和label属性可以和Application标签下的icon和label不一样,如果在activity下具体指定了加载的图标,那么就会在加载这个Activity的时候加载属于这个Activity的icon和label,如果不存在,那么就会加载Application的icon和label
    [4] 一般一个App只需要一个启动图标,其它的Activity都是从页面转过去
2、隐式意图
    [1] 定义:通过指定一组动作或者数据并通过应用的意图过滤器,来执行指定的动作
    [2] 步骤:
      
  1. Demo:
  2. // [1] 获取意图对象
  3. Intent intent = new Intent();
  4. // [2] 设置意图动作
  5. intent.setAction("aa");
  6. intent.addCategory("android.intent.category.DEFAULT");
  7. // [3] 设置数据
  8. // intent.addCategory("com.young.intent");
  9. // [4] 开启意图
  10. startActivity(intent);
  1. <!--在添加intent-filter的时候必须指定category不然会报错-->
  2. <activity android:name=".TestActivity">
  3. <intent-filter>
  4. <action android:name="aa"/>
  5. <category android:name="android.intent.category.DEFAULT"/>
  6. </intent-filter>
  7. </activity>

3、显式意图
    [1] 定义:直接指定具体的包名和类名
  1. //【1】 通过构造方法直接执行意图
  2. Intent intent = new Intent(this, TestActivity.class);
  3. startActivity(intent);
    [2] 总结
        [1] 开启自己应用的界面使用显式意图
        [2] 开启其他的应用(系统应用使用隐式意图
        [3] 显式意图更安全一些
4、人品计算器案例
    主要内容
  1. //最重要的是这一块
  2. Intent intent = new Intent(this, ResultActivity.class);
  3. intent.putExtra("name",name);
  4. intent.putExtra("sex",sex);
  5. startActivity(intent);
  1. Intent intent = getIntent();
  2. String name = intent.getStringExtra("name");
  3. int sexValue = intent.getIntExtra("sex", 0);

5、短信大全案例
 [1]使用隐式意图传送数据
  1. Intent intent = new Intent();
  2. intent.setAction("android.intent.action.SEND");
  3. intent.addCategory("android.intent.category.DEFAULT");
  4. intent.setType("text/plain");
  5. intent.putExtra("sms_body",message);
  6. startActivity(intent);
 [2] 使用系统上层应用代码的过程
    (1)  首先点击系统的功能,然后使用monitor进行监视,找到相关的组件
     (2) 通过这个组件名,在AndriodiManfest.xml文件中找到相关的activity的intent-filter节点,找到可能的类型,然后复制下来
    (3) 将意图的属性设置好,
  1. Intent intent = new Intent();
  2. intent.setAction("android.intent.action.SEND");
  3. intent.addCategory("android.intent.category.DEFAULT");
  4. intent.setType("text/plain");
  5. intent.putExtra("sms_body",message);
  6. startActivity(intent);
    (4)转到相关的应用
 
6、短信发送器案例
 代码如下
  1. Maintivity.java
  2. package com.smssender;
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.telephony.SmsManager;
  7. import android.view.View;
  8. import android.widget.Button;
  9. import android.widget.EditText;
  10. import java.util.ArrayList;
  11. public class MainActivity extends Activity implements View.OnClickListener {
  12. private Button btn_get_phone;
  13. private Button btn_send;
  14. private Button btn_insert;
  15. private EditText et_phone;
  16. private EditText et_content;
  17. private final int GET_PHONE_NUMBER = 1;
  18. private final int GET_INSERT_CONTENT = 2;
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_main);
  23. btn_get_phone = (Button)findViewById(R.id.btn_get_phone);
  24. btn_send = (Button)findViewById(R.id.btn_send);
  25. btn_insert = (Button)findViewById(R.id.btn_insert);
  26. et_phone = (EditText)findViewById(R.id.et_number);
  27. et_content = (EditText)findViewById(R.id.et_content);
  28. btn_get_phone.setOnClickListener(this);
  29. btn_send.setOnClickListener(this);
  30. btn_insert.setOnClickListener(this);
  31. }
  32. @Override
  33. public void onClick(View view) {
  34. Intent intent = null;
  35. switch (view.getId()){
  36. case R.id.btn_get_phone :
  37. intent = new Intent(this, ContactActivity.class);
  38. startActivityForResult(intent,GET_PHONE_NUMBER);
  39. break;
  40. case R.id.btn_insert :
  41. intent = new Intent(this, TemplateActivity.class);
  42. startActivityForResult(intent,GET_INSERT_CONTENT);
  43. break;
  44. case R.id.btn_send :
  45. String phone = et_phone.getText().toString().trim();
  46. String content = et_content.getText().toString().trim();
  47. SmsManager manager = SmsManager.getDefault();
  48. ArrayList<String> msgs = manager.divideMessage(content);
  49. for(String msg : msgs){
  50. manager.sendTextMessage(phone,null,msg,null,null);
  51. }
  52. break;
  53. }
  54. }
  55. @Override
  56. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  57. super.onActivityResult(requestCode, resultCode, data);
  58. if(resultCode == RESULT_OK){
  59. switch(requestCode){
  60. case GET_PHONE_NUMBER :
  61. String phone = data.getStringExtra("phone");
  62. et_phone.setText(phone);
  63. break;
  64. case GET_INSERT_CONTENT :
  65. String content = data.getStringExtra("content");
  66. et_content.setText(content);
  67. break;
  68. }
  69. }
  70. }
  71. }
  1. TemplateActivity.java
  2. package com.smssender;
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.AdapterView;
  8. import android.widget.ArrayAdapter;
  9. import android.widget.ListView;
  10. /**
  11. * Created by young on 2016/11/27.
  12. */
  13. public class TemplateActivity extends Activity {
  14. private String modes[] = new String[]{"你好正在开会,请稍后再拨","你好正在打架,请稍后再拨","你好正在玩游戏,请稍后再拨","你好正在开运动会,请稍后再拨","你好正在约会,请稍后再拨","你好正在开会,请稍后再拨"};
  15. private ListView lv;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_template);
  20. lv = (ListView) findViewById(R.id.lv_template);
  21. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.template_item,modes);
  22. lv.setAdapter(adapter);
  23. lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  24. @Override
  25. public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
  26. String msg = modes[i];
  27. Intent intent = new Intent();
  28. intent.putExtra("content",msg);
  29. setResult(RESULT_OK,intent);
  30. finish();
  31. }
  32. });
  33. }
  34. }
  1. contractActivity.java
  2. package com.smssender;
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.AdapterView;
  9. import android.widget.BaseAdapter;
  10. import android.widget.ListView;
  11. import android.widget.TextView;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. /**
  15. * Created by young on 2016/11/27.
  16. */
  17. public class ContactActivity extends Activity {
  18. private List<People> lists = new ArrayList<>();
  19. private ListView lv_contact;
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_contact);
  24. lv_contact = (ListView)findViewById(R.id.lv_contact);
  25. initList();
  26. Myadapter adapter = new Myadapter();
  27. lv_contact.setAdapter(adapter);
  28. lv_contact.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  29. @Override
  30. public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
  31. String phone = lists.get(i).getPhone();
  32. Intent intent = new Intent();
  33. intent.putExtra("phone",phone);
  34. setResult(RESULT_OK,intent);
  35. finish();
  36. }
  37. });
  38. }
  39. private void initList() {
  40. for(int i = 0;i < 20;i++){
  41. People people = new People();
  42. people.setName("张三");
  43. people.setPhone("11"+i++);
  44. lists.add(people);
  45. }
  46. }
  47. private class Myadapter extends BaseAdapter{
  48. @Override
  49. public int getCount() {
  50. return lists.size();
  51. }
  52. @Override
  53. public Object getItem(int i) {
  54. return null;
  55. }
  56. @Override
  57. public long getItemId(int i) {
  58. return 0;
  59. }
  60. @Override
  61. public View getView(int i, View view, ViewGroup viewGroup) {
  62. View view1 = null;
  63. if(view == null){
  64. view1 = View.inflate(getApplicationContext(),R.layout.contact_item,null);
  65. }else{
  66. view1 = view;
  67. }
  68. TextView tv_name = (TextView)view1.findViewById(R.id.tv_name);
  69. TextView tv_phone = (TextView) view1.findViewById(R.id.tv_phone);
  70. String phone = lists.get(i).getPhone();
  71. String name = lists.get(i).getName();
  72. tv_name.setText(name);
  73. tv_phone.setText(phone);
  74. return view1;
  75. }
  76. }
  77. }

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会被系统单独加到一个新的任务栈中

 
0 0
原创粉丝点击