四大应用组件之Activity

1. 意图

  1.1. Intent:意图
     显示意图:  Intent(Context context,Class clazz)
     功能: 启动Activity
     
  1.2.     隐式意图: Intent(String action)  比如:分享选择、视频选择播放器、邮箱
   注册了该action的App都可以启动接收
     功能: 启动App
    分享应用注册action:
    <activity name=".a">
    <intent-filter>
       <action>com.kuaibo.share</action>
    </intent-filter>
    </activity>
     
     一个Activity要成为主要的Activity:
        <action android:name="android.intent.action.MAIN" />   配置、

1.3  意图案例:  Android2.3源码使用:

案例1:启动拨号界面

            // 启动拨号界面
             // 通过ActivityManager过滤找到Activity包名
             // 找源码,找到功能清单文件中的intent-filter
             String  action= Intent.ACTION_DIAL;
             Intent intent=new Intent(action);
             // Shema 前缀
            intent.setData(Uri.parse("tel:"+110));
             startActivity(intent);

 案例2: 启动发短信界面:

            // 发短信界面
            Intent intent = new Intent("android.intent.action.SENDTO",Uri.parse("sms:"+110));
            intent.putExtra("sms_body","hello");
             startActivity(intent);

 案例3:发送短信:

<!-- 权限配置 --> 
<uses-permission android:name="android.permission.SEND_SMS" />
    private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE =10 ;
//  方法调用入口这里
public void testMsmTo()
    {
// 判断权限
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.SEND_SMS)
                != PackageManager.PERMISSION_GRANTED)
        {
 
  // 权限申请
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.SEND_SMS},
                    MY_PERMISSIONS_REQUEST_CALL_PHONE);
        } else
        {
 //具备权限发短信
            sendMsm();
        }
    }

    public void sendMsm()
    {
        // 发短信
        SmsManager smsManager= SmsManager.getDefault();
        //PendingIntent sentIntent, PendingIntent deliveryIntent 用于做短短信回执,别人看了短信有回复
        //(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)
        smsManager.sendTextMessage("15580917583",null,"通过ActivityManager过滤找到Activity包名",null,null);
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
    {

        if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE)
        {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
                sendMsm();
            } else
            {
                // Permission Denied
                Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
            }
            return;
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

 4 查看打出运行时哪个Activity

   2. Activity 生命周期:

    启动: onCreate  ->  onStart -> onResume
   死亡: onPause ->  onStop -> onDestroy
 运行到停止:onPause->onStop
 停止到运行:onRestart-> onStart  ->onResume       跳入B Activity
 运行到暂停: onPause       弹出对话框
 暂停到运行: onResum

  3. Activity数据传递,待返回值的回调 

  3.1. Activity数据传递,待返回值的回调
  ActivityA组装数据:

  Intent intent=new Intent(MainActivity.this,SecondActivity.class);
                // 数据传递
                intent.putExtra("name","xiaoze");
                // 请求码
                startActivityForResult(intent,1000);

ActivityB接收数据:

 String name= getIntent().getStringExtra("name");
        Toast.makeText(SecondActivity.this,name,Toast.LENGTH_LONG).show();
        Intent data=new Intent();
        // 携带返回数据
        data.putExtra("back_name","xiaozemaliya");
        // 返回状态吗
        setResult(2000,data);
        // 关闭页面
        finish();

ActivityA回调接收数据:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // 请求吗和响应吗对应上
        if(requestCode ==1000 && resultCode == 2000  ){
            String result= data.getStringExtra("back_name");
            Log.e("denganzhi1",result);
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

  5. Activity 的任务栈,先进去后出

启动模式:
  standard:默认每次新启动Activity
  singleTop:   如果已经位于栈顶,那么复用,  不位于栈顶,启动新的
  singleTask:  如果已经位于栈顶,那么复用, 不位于栈顶,把它上面的出栈 
  android:launchMode="singleInstance":  创建一个新的栈,只有一个实例

启动1 , 启动2 singleInstance , 启动3 ,3位于TaskA 上 

发布了75 篇原创文章 · 获赞 68 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/dreams_deng/article/details/104709168