android_day06

1.如果创建一个新的Activity(继承android.app.Activity)
    [1]Android的四大组件都要在清单文件里面配置
    [2]如果你想让你的应用有多个启动图标  你的Activity需要这样配置
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>        
    [3]Activity下的lable(标题)和icon(标题的图标,也是app的图标)属性可以和Application节点的属性不一样)属性可以和Application节点的属性不一样  默认用Application节点下的属性
    [4]一个Android应用一般我们就配置一个启动图标就可以   看见的其他页面都是从第一个页面跳转进去
    
2.隐式意图(intent)
    定义:通过指定一组动作或者数据
        [1]//点击按钮 实现拨打电话的功能
        public void click1(View v){
            //1.创建意图对象
            Intent intent=new Intent();
            //2.设置拨打的动作
            intent.setAction(Intent.ACTION_CALL);
            //3.设置拨打的数据
            intent.setData(Uri.parse("tel:"+119));
            
            //4.开启Activity 记得加上权限<uses-permission android:name="android.permission.CALL_PHONE"/>
            startActivity(intent);
        }
        
         //点击按钮 跳转到TestActivity
        public void click2(View v){
            //1.创建意图对象 意图就是我要完成一件事
            Intent intent=new Intent();
            
            //2.设置跳转的动作
            intent.setAction("com.itheima.testactivity");
            //3.设置category
            intent.addCategory("android.intent.category.DEFAULT");
            
            //4.设置数据
            //intent.setData(Uri.parse("itheima:"+110));
            //5.设置数据类型
            //intent.setType("aa/bb");
            
            //6.注意小细节 如果setdata方法和settype方法一起使用的时候  应该使用下面的方法
            intent.setDataAndType(Uri.parse("itheima1:"+110), "aa/bb1");
            
            //4.开启Activity
            startActivity(intent);
            
        }
        
        [2]清单文件中配置如下:
        <!-- 配置testActivity -->
        <activity 
            android:name="com.itheima.newactivity.TestActivity"
            android:icon="@drawable/head2"
            android:label="我是第二个页面"
            >
           
            <intent-filter >
                    <action android:name="com.itheima.testactivity"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <data android:mimeType="aa/bb" android:scheme="itheima"/>
            </intent-filter>
            
            <intent-filter >
                <action android:name="com.itheima.testactivity"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="aa/bb1" android:scheme="itheima1"/>
            </intent-filter>
            
        </activity>
        
        <!-- 配置Activity3 -->
        <activity android:name="com.itheima.newactivity.Test3Activity">
        [3]TestActivity代码如下:
        public class TestActivity extends Activity {
            //当Activity启动
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 
                 //1.加载布局
                setContentView(R.layout.activity_test);
                
                //2.获取mainActivity传递过来的数据  getIntent()得到启动该activity的意图
                Intent intent=getIntent();
                //3.获取数据
                Uri data = intent.getData();
                String scheme = data.getScheme();
                
                System.out.println("scheme:"+scheme);//scheme:itheima1

                System.out.println("data:"+data);//data:itheima1:110  即schema+":"+传递的110

                
            }
            
        }
        
        
        
    
    
3.显式意图
    定义:通过指定具体的包名和类名
    
        //点击按钮 跳转到TestActivity
        public void click3(View v){
            //1.创建意图对象  意图就是我要完成一件事
            Intent intent=new Intent(this, Test3Activity.class);
            //2.设置包名和类名   packageName:当前应用的包名
            //intent.setClassName("com.itheima.newactivity", "com.itheima.newactivity.Test3Activity");
            
            //3.开启Activity
            startActivity(intent);
        }
    
    总结:[1]开启自己应用的界面,用显式意图
          [2]开启其他应用(系统应用)的时候用隐式意图  电话拨号器
          [3]显式意图安全一些
          
4.人品计算器小案例
    [1]画页面
    ___xxxx___                    张三
    男  女  人妖                男
    计算                        您的人品非常好
    
    [1.1]activity_main.xml代码如下:
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            tools:context="com.itheima.rpcalc.MainActivity"
            tools:ignore="MergeRootFrame" >

            <EditText
                android:id="@+id/et_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="请输入姓名" />

            <RadioGroup
                android:id="@+id/radioGroup1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >

                <RadioButton
                    android:id="@+id/rb_male"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="男" />

                <RadioButton
                    android:id="@+id/rb_female"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="25dp"
                    android:text="女" />

                <RadioButton
                    android:id="@+id/rb_other"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="25dp"
                    android:text="人妖" />
            </RadioGroup>

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="click"
                android:text="计算" />

        </LinearLayout>
    
    [1.2]activity_result代码如下:
        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >
            
            <TextView 
                android:id="@+id/tv_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="张三"
                />
            
            <TextView 
                android:id="@+id/tv_sex"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="男"
                />
            
            <TextView 
                android:id="@+id/tv_result"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="您的人品非常好"
                />
            
            
        </LinearLayout>
    
    
    [2]实现mainActivity的逻辑,MainActivity代码如下:
        //点击按钮  实现计算人品  跳转到ResultActivity页面
        public void click(View v){
            //1.获取用户名
            String name = et_name.getText().toString().trim();
            //2.判断一下name是否为空
            if(TextUtils.isEmpty(name)){
                Toast.makeText(getApplicationContext(), "亲 请输入姓名", 1).show();
                return;
            }
            //3.判断用户选择的性别
            int radioButtonId = rg_group.getCheckedRadioButtonId();
            int sex=0;
            
            switch (radioButtonId) {
            case R.id.rb_male://代表选择的是男的
                sex=1;
                break;
            case R.id.rb_female://代表选择的是女的
                sex=2;
                break;
            case R.id.rb_other://代表选择的是人妖
                sex=3;
                break;

            default:
                break;
            }
            
            if(sex==0){
                Toast.makeText(getApplicationContext(), "请选择性别", 1).show();
                System.out.println("radioButtonId:"+radioButtonId);
                return;
            }
            
            //4.跳转到ResultActivity页面  用显式意图跳转
            Intent intent=new Intent(this,ResultActivity.class);
            //传递姓名
            intent.putExtra("name", name);
            //传递性别
            intent.putExtra("sex", sex);
            
            startActivity(intent);
            
            
        }
    
    
    [3]跳转到结果页面逻辑ResultActivity代码如下:
        //1.加载布局
        setContentView(R.layout.activity_result);
        
        TextView tv_name=(TextView) findViewById(R.id.tv_name);
        TextView tv_sex=(TextView) findViewById(R.id.tv_sex);
        TextView tv_result=(TextView) findViewById(R.id.tv_result);
        //2.获取mainActivity传递过来的数据
        Intent intent = getIntent();//获取开启此Activity的意图对象
        //3.获取name和sex的值  小技巧:传递的是什么数据类型  这边就按照传递的数据类型获取
        String name = intent.getStringExtra("name");
        int sex = intent.getIntExtra("sex", 0);
        
        //4.根据name和sex显示数据
        tv_name.setText(name);
        
        byte[] bytes=null;
        
        //5.显示性别
        try {
            switch (sex) {
            case 1:
                tv_sex.setText("男");
                bytes=name.getBytes("gbk");
                break;
            case 2:
                tv_sex.setText("女");
                bytes=name.getBytes("utf-8");
                break;
            case 3:
                tv_sex.setText("人妖");
                bytes=name.getBytes("iso-8859-1");
                break;

            default:
                break;
            }
            
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        //6.计算人品结果  市面上大多数应用采用的是随机数
        int total=0;
        for (byte b:bytes) {
            int number=b&0xff;  //0001 1111
            total+=number;        //1111 1111
        }
        
        //获取得分
        int score=Math.abs(total)%100;
        if(score>90){
            tv_result.setText("您的人品非常好,您家的祖坟都冒青烟了");
        }else if(score>80){
            tv_result.setText("您的人品非常还可以");
        }else if(score>60){
            tv_result.setText("您的人品非常刚及格");
        }else{
            tv_result.setText("您的人品太次了 您需要努力啊");
        }
    

5.短信大全小案例
    [1]MainActivity代码如下:
        //String objects[]={...}
         //1.找到 lv
        ListView lv=(ListView) findViewById(R.id.lv);
        //2.设置数据  先有数据  
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, R.layout.item, objects);
        
        //3.设置数据适配器
        lv.setAdapter(adapter);
        //4.给listview设置  点击事件  小技巧:
        lv.setOnItemClickListener(new OnItemClickListener() {
            //listview的一个条目被点击的时候调用
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                //5.把点击条目的数据取出来  掌握一条原则:数据在哪里存着呢  就去哪里取
                String content=objects[position];
                
                //6.跳转大盘发送短信页面
                /**
                 * <intent-filter>
                   <action android:name="android.intent.action.SEND" />
                   <category android:name="android.intent.category.DEFAULT" />
                   <data android:mimeType="text/plain" />
               </intent-filter>
                 */
                Intent intent=new Intent();
                //6.1设置action
                intent.setAction("android.intent.action.SEND");
                //6.2添加category
                intent.addCategory("android.intent.category.DEFAULT");
                //6.3设置type
                intent.setType("text/plain");
                
                //6.4传递数据
                intent.putExtra("sms_body", content);
                
                //7.跳转到发送短信页面
                startActivity(intent);
            }
            
        });
        
    [2]activity_main代码如下:
        <ListView 
            android:id="@+id/lv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            ></ListView>
    
    [3]item代码如下:
        <?xml version="1.0" encoding="utf-8"?>
        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />
        
        
6.短信发送器小案例
    总结  1 2共同点  A界面 ---> B界面  然后把A界面的数据传递到B界面
                     A界面 ---> B界面  当B页面关闭的时候,把数据返回给A界面
    [1]清单文件配置activiy,还配置权限:<uses-permission android:name="android.permission.SEND_SMS"/>
    [2]activity_main代码如下:
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context="com.itheima.smsmanager.MainActivity"
            android:orientation="vertical"
            tools:ignore="MergeRootFrame">

            <RelativeLayout 
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                
                <EditText 
                    android:id="@+id/et_number"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="请输入手机号码"
                    />
                
                <Button 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignBottom="@id/et_number"
                    android:layout_alignParentRight="true"
                    android:onClick="add"
                    android:text="+"
                    />
                
            </RelativeLayout>
            
            <EditText 
                android:id="@+id/et_content"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:gravity="top"
                android:hint="请输入发送短信的内容"
                />
            <Button 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="insertsms"
                android:text="插入短信模板"
                />
            <Button 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="send"
                android:text="发送"
                />
            
        </LinearLayout>

    [3]activity_contact代码如下:
        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >
            
            <ListView 
                android:id="@+id/lv"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                ></ListView>
               
        </LinearLayout>
    [4]contact_item代码如下:
        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal" >
            
            <TextView 
                android:id="@+id/tv_name"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="aaa"
                android:textSize="20sp"
                />
            
            <TextView 
                android:id="@+id/tv_phone"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="1110"
                android:textSize="20sp"
                />

        </LinearLayout>

    [5]activity_smstemplate代码如下:
        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal" >
            
            <TextView 
                android:id="@+id/tv_name"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="aaa"
                android:textSize="20sp"
                />
            
            <TextView 
                android:id="@+id/tv_phone"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="1110"
                android:textSize="20sp"
                />

        </LinearLayout>

    [6]smstemplate_item代码如下:
        <?xml version="1.0" encoding="utf-8"?>
        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#000000"
            android:text="TextView" />

    [7]Person代码如下:
        private String name;
        private String phone;
        ...get/set...
    [8]MainActivity代码如下:
        private EditText et_content;
        private EditText et_number;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            //1.找到我们关心的控件
            et_number = (EditText) findViewById(R.id.et_number);
            et_content = (EditText) findViewById(R.id.et_content);

        }
        
        //点击按钮跳转到发送短信模板页面
        public void insertsms(View v){
            Intent intent=new Intent(this,SmsTemplateActivity.class );
            startActivityForResult(intent, 2);
        }

        
        //点击按钮跳转到ContactActivity页面
        public void add(View v){
            Intent intent=new Intent(this, ContactActivity.class);
            //startActivity(intent);
            //小细节  如果点击按钮 开启了另外的Activity 并且当开启的这个Activity关闭的时候
            //想要这个开启Activity的数据   用下面这个方法开启activity
            startActivityForResult(intent, 1);
            
        }
        
        
        //当我们开启的Activity 页面关闭的时候  这个方法就调用
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            
            if(requestCode==1){
                //代表请求ContactActivity这个页面的数据
                String phone=data.getStringExtra("phone");
                et_number.setText(phone);
            }else if(requestCode==2){
                //代表请求 短信模板页面的数据
                String smsContent = data.getStringExtra("smscontent");
                et_content.setText(smsContent);
            }
            
            
            /*if(resultCode==10){
                //代表请求ContactActivity这个页面的数据
                String phone=data.getStringExtra("phone");
                et_number.setText(phone);
            }else if(resultCode==20){
                //代表请求 短信模板页面的数据
                String smsContent = data.getStringExtra("smscontent");
                et_content.setText(smsContent);
            }*/
            
            super.onActivityResult(requestCode, resultCode, data);
        }
        
        //点击按钮  发送短信
        public void send(View v){
            //1.获取发送短信的号码和发送的内容
            String number=et_number.getText().toString().trim();
            String content=et_content.getText().toString().trim();
            //2.获取到smsmanager的实例
            SmsManager smsManager = SmsManager.getDefault();
            //怕信息太多,切割
            ArrayList<String> divideMessages = smsManager.divideMessage(content);
            for (String div : divideMessages) {
                /**
                 * destinationAddress 发给谁
                 * scAddress 服务中心号码
                 * text 要发送的内容
                 * 
                 */
                smsManager.sendTextMessage(number, null, div, null, null);
                System.out.println("给"+number+"发送短信:"+div);
            }
            
            
        }


    [9]ContactActivity代码如下:
        private List<Person> lists;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            
            //加载布局
            setContentView(R.layout.activity_contact);
            
            //1.找到控件
            ListView lv=(ListView) findViewById(R.id.lv);
            
            //2.准备listview要显示的数据   模拟点假数据
            lists = new ArrayList<Person>();
            for (int i = 0; i < 20; i++) {
                Person p=new Person();
                p.setName("张三"+i);
                p.setPhone("11"+i);
                
                lists.add(p);
            }
            
            //3.展示数据
            lv.setAdapter(new MyAdapter());
            
            //4.给listview设置点击事件
            lv.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    
                    //5.获取点中条目的数据  数据在哪里存着呢  就去哪里取
                    String phone = lists.get(position).getPhone();
                    
                    //5.0把数据返回给调用者
                    Intent intent=new Intent();
                    intent.putExtra("phone", phone);
                    
                    //把结果返回给调用者
                    setResult(10, intent);
                    
                    //5.1关闭当前页面
                    finish();
                }
                
            });
            
            
        }
        
        @Override
        public void onBackPressed() {
            // TODO Auto-generated method stub
            super.onBackPressed();
        }

        private class MyAdapter extends BaseAdapter{

            @Override
            public int getCount() {
                return lists.size();
            }

            @Override
            public Object getItem(int arg0) {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public long getItemId(int arg0) {
                // TODO Auto-generated method stub
                return 0;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View view;
                if(convertView==null){
                    view=View.inflate(getApplicationContext(), R.layout.contact_item, null);
                }else{
                    view=convertView;
                }
                //1.找到我们在item中定义的控件  用来显示数据
                TextView tv_name=(TextView) view.findViewById(R.id.tv_name);
                TextView tv_phone=(TextView) view.findViewById(R.id.tv_phone);
                //2.展示数据
                tv_name.setText(lists.get(position).getName());
                tv_phone.setText(lists.get(position).getPhone());
                
                return view;
            }
            
        }
        
    [10]SmsTemplateActivity代码如下:
        String objects[] = {"我在吃饭,请稍后联系","我在开会,请稍后联系","我在上课,请稍后联系","我在打代码,请稍后联系","我在约会,请稍后联系"};
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_smstemplate);
            
            //1.找到lv
            ListView lv=(ListView) findViewById(R.id.lv);
            
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.smstemplate_item, objects);
            
            //2.显示数据
            lv.setAdapter(adapter);
            
            //3.设置lv的条目的点击事件
            lv.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    
                    //4.取出点击条目的数据
                    String smsContent=objects[position];
                    
                    //5.把smsContent返回调用者
                    Intent intent=new Intent();
                    intent.putExtra("smscontent", smsContent);
                    setResult(20, intent);
                    
                    //6.调用finish
                    finish();
                    
                }
            });
            
            
            
        }
    
    
                     
                     
7.Activity的生命周期
    [1]onCreate方法
    [2]onDestroy方法  当Activity销毁的时候调用
    [3]onStart方法  当Activity界面变成可视的时候调用
    [4]onStop方法   当Activity界面不可见
    [5]onResume方法  界面有按钮可以被点击了  获取了焦点
    [6]onPause方法  界面上按钮不可以被点击  失去焦点
    [7]onRestart方法  界面重启启动
    
    【实例】:(重点):(可以看Activity生命周期图,帮助记忆)
    activity启动:onCreate-->onStart-->onResume
    启动别的activity,导致被盖住:onPause-->onStop
    返回到本activity:onRestart-->onStart-->onResume
    ctrl+F11(横竖屏切换):onPause-->onStop-->onDestroy-->onCreate-->onStart-->onResume
    启动透明应用activity:onPause
    透明应用activity返回到本activity:onResume
    返回(退出):onPause-->onStop-->onDestroy
    

    

8.横竖屏切换Activity的生命周期
    ctrl+F11 进行横竖屏切换
    activity配置:android:screenOrientation="portrait" 代表竖屏  
    activity配置:android:screenOrientation="landscape" 代表横屏
    
    

9.任务栈的概念(API Guides>Activities>Tasks and Back Stack)
    栈:先进后出
    队列:先进先出
    task:什么叫任务
    [1]打开一个Activity叫进栈  关闭一个Activity叫出栈
    [2]我们操作的Activity永远是栈顶的Activity
    [3]任务栈是用来维护用户操作体验的
    [4]应用程序退出了是任务栈清空了
    [5]一般情况一个应用程序对应一个任务栈
    
10.Activity的四种启动模式
    standard(默认)启动模式:
        不断创建Activity,进到任务栈
    singletop启动模式:(即栈顶的activity不会再次创建自己并进栈)
        singletop单一顶部模式,在activity的配置文件中设置android:launchMode="singleTop"。
        如果任务栈的栈顶存在这个要开启的activity,不会重新创建activity,而是复用已经存在的activity.保证栈顶的activity如果存在,不会重复创建。
        应用场景:浏览器的书签
    singleTask启动模式:(查找任务栈有没有实例activity,有则将其位置当成栈顶,栈顶外的数据不要;无则创建,并将其activity放入栈顶)
        singleTask单一任务栈,在当前任务栈里面只能有一个实例存在
        当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有别的activity都清空,复用这个已经存在的activity。保证整个任务栈里面只有一个实例存在
        应用场景:浏览器的activity
        如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singleTask启动模式
    singleInstance启动模式:(运行在自己的任务栈中并只有一个实例)
        【例子(activity1是默认,activity2和activity3都是singleInstance):启动activity1-->activity2-->activity3-->activity1-->activity3;销毁顺序:activity3--》activity1--》activity1--》activity2】
        singleInstance启动模式非常特殊,activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在
        如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance
        应用场景:来电页面
    
    
    
11.今日总结
    [1]如何创建新的Activity
    [2]2种意图  显式  隐式
    [3]界面之间传递数据  putExtra()  用map封装的
    [4]开启Activity2种方式
    [5]请求码和结果码
    [6]关闭一个Activity finish();
    [7]Activity的生命周期
    [8]当横竖屏切换
    [9]task
    [10]四种启动模式
    


【注意】activity之间传递数据: [putExtra()  用map封装的]
    [1]启动activity【startActivity/startActivityForResult】
    intent.setData(Uri.parse("itheima:"+110))或者intent.setDataAndType(Uri.parse("itheima1:"+110), "aa/bb1"):设置data
    intent.putExtra("name", name);
    intent.putExtra("sex", sex);
    startActivity(intent)或者startActivityForResult(intent, 请求码):启动对应的匹配intent-filter的activity.(如果有两个activity匹配,会出现选择(不好))
    
    [2]被启动的activity【getIntent()】
    getIntent()得到启动该activity的意图  
    intent.getData()得到传递的data数据
    String name = intent.getStringExtra("name");
    int sex = intent.getIntExtra("sex", 0);
    
    [3]被启动的activity返回结果【setResult】
        //把数据返回给调用者
        Intent intent=new Intent();
        intent.putExtra("phone", phone);
        //把结果返回给调用者
        setResult(10, intent);//结果码
        //关闭当前页面
        finish();
    [4]启动activity:(能得到请求码和结果码还有意图)
        //当我们开启的Activity 页面关闭的时候  这个方法就调用
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            
            if(requestCode==1){
                //代表请求ContactActivity这个页面的数据
                String phone=data.getStringExtra("phone");
                et_number.setText(phone);
            }else if(requestCode==2){
                //代表请求 短信模板页面的数据
                String smsContent = data.getStringExtra("smscontent");
                et_content.setText(smsContent);
            }
            
            
            /*if(resultCode==10){
                //代表请求ContactActivity这个页面的数据
                String phone=data.getStringExtra("phone");
                et_number.setText(phone);
            }else if(resultCode==20){
                //代表请求 短信模板页面的数据
                String smsContent = data.getStringExtra("smscontent");
                et_content.setText(smsContent);
            }*/
            
            super.onActivityResult(requestCode, resultCode, data);
        }
    
【注意】finish()关闭当前activity    
    
【注意】透明应用:application配置 android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"。
    可能会出异常:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.itheima.touming/com.itheima.touming.MainActivity}: java.lang.IllegalStateException:You need to use a Theme.AppCompat theme (or descendant) with this activity.
    原因:mainactivity不能继承ActionBarActivity,要继承activity
    
【注意】SmsManager:
        //获取到smsmanager的实例
        SmsManager smsManager = SmsManager.getDefault();
        //怕信息太多,切割
        ArrayList<String> divideMessages = smsManager.divideMessage(content);
        for (String div : divideMessages) {
            /**
             * destinationAddress 发给谁
             * scAddress 服务中心号码
             * text 要发送的内容
             * 
             */
            smsManager.sendTextMessage(number, null, div, null, null);
            System.out.println("给"+number+"发送短信:"+div);
        }

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值