Activity的七大属性

Activity的七大属性包括:

     ComponentName   Extra   Flags  Category   Action    Data   Type

     1) ComponentName  : 指定了ComponentName属性的Intent已经明确了它将要启动哪个组件,因此这种Intent被称为显式Intent,没有指定ComponentName属性的Intent被称为隐式Intent。隐式Intent没有明确要启动哪个组件,应用会根据Intent指定的规则去启动符合条件的组件

     Componentname可以实现跳转至其他页面也可以实现跳转至其他应用  代码示例如下:

       xmlCode:

"1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main">

    <Button
        android:id="@+id/btn_01"
        android:onClick="btnClick"
        android:text="跳转至其他页面"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn_02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="btnClick"
        android:layout_below="@id/btn_01"
        android:text="跳转至其他程序"/>
RelativeLayout>
           javaCode:



import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();
    }
    public void btnClick(View view){
        switch (view.getId()){

            case R.id.btn_01:
                // 1.componentname  跳转页面  使用的显示意图 就借助这个属性
                Intent intent  = new Intent();
                ComponentName componentName = new ComponentName(MainActivity.this,ThridActivity.class);
                intent.setComponent(componentName);
                startActivity(intent);
                break;
            case R.id.btn_02:
                // 2.componentname 跳转到其他应用
                Intent intent1 = new Intent();
                //1参.目标应用的包名
                //2参.目标应用的Activity的全路径
                ComponentName componentName1 = new ComponentName("zhanghao.androidday06_activityforbitmap",
                        "zhanghao.androidday06_activityforbitmap.MainActivity");
                //把封装的显示动作放到意图中
                intent1.setComponent(componentName1);
                //开启意图
                startActivity(intent1);
                break;
        }
    }
}
 

        2)Flags: 通过设置Flag,我们可以设定一个Activity的启动模式,这个和launchMode基本上是一样的.

            javaCode:


        

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends BaseActivity {

   public final static String TAG ="MainActivity";
   private TextView textView;
 
   @SuppressLint("SimpleDateFormat")
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.addActivityIntance(this);
        textView = (TextView)findViewById(R.id.text);
    }  
    public  void setClick(View v ){     
       Intent  intent  = new  Intent(MainActivity.this,SecondActivity.class);
       intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
       //setFlags只能设置三种启动模式
        //1.如果不设置,就是默认!
       //2.如果flags Flag_activity_single_top 相当于 清单文件中的-->singleTop
       //3.Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP
       //两个结合起来相当于-->singleTask
       //注意 flags属性不能设置 singleIntance 
       startActivity(intent);
    }
}

        3)Extras: 用于在Activity之间传递数据,Extra可以传递基本类型,String类型以及实现了Serializable或者Parcelable接口的类

           javaCode:

          

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

public class MainActivity extends Activity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }

   public void textClick(View view){   
      Intent intent = new Intent();
      intent.setClass(MainActivity.this, SecondActivity.class);
      //利用extra属性  进行传值
       intent.putExtra("send", "我要告诉你!一个秘密!!");
      intent.putExtra("it", 94250);
      intent.putExtra("qq", true);
      //开启意图
      startActivity(intent2);  
   }
   
}
       SecondActivity接收传来的值:



import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class SecondActivity extends Activity{
  
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      // TODO Auto-generated method stub
      super.onCreate(savedInstanceState);
       setContentView(R.layout.secondlayout);
       Intent intent = getIntent(); //获取传递过来的意图
       if (intent != null) {
          //不为空,去Intent中取值  根据Key获取传递过来的字符串数据   
          String sendString = intent.getStringExtra("send");
          //defaultValue 默认值  如果key没有对应的值,就返回默认值
          int it = intent.getIntExtra("it", 250);
          //获取boolean类型  
          boolean qq =intent.getBooleanExtra("qq", false);
         Toast.makeText(this, sendString+it+qq, Toast.LENGTH_LONG).show();         
      }
   }
}

        Action   Category    Type   Data  基本上一起使用 我们放在一起介绍如下:

       4)Action: intent中的Action我们在使用广播的时候用的比较多,在Activity中,我们可以通过设置Action来隐式的启动一个Activity,比如我们有一个ThirdActivity,我们在清单文件中做如下配置:

<activity android:name=".ThirdActivity" >

    <intent-filter>
        <action android:name="custom1" />
        <action android:name="custom2" />

        <category android:name="category1" />
        <category android:name="android.intent.category.DEFAULT" />

        <data
            android:mimeType="text/*"
            android:scheme="http" />
    intent-filter>
activity>
当我们在清单文件中做了这样的配置之后,我们的ThirdActivity会就会响应这个动作.

       5)Category: 我们使用这种隐式启动的方式来启动一个Activity的时候,必须要action和category都匹配上了,该Activity才会成功启动。如果我们没有定义category,那么可以暂时先使用系统默认的category,总之,category不能没有。

       6)Data: Data属性通常用于向Action属性提供操作的数据。Data属性的值是个Uri对象。通过设置data,我们可以执行打电话,发短信,开发网页等等操作.

        7)Type: Type属性用于指定Data所指定的Uri对应的MIME类型。MIME只要符合“abc/xyz”这样的字符串格式即可。

         javaCode:

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
    //通过隐士意图去开启SecondActivity
    //开启的条件:匹配过滤器中的action category data
    public  void btnClick(View view){
        Intent  intent = new Intent();
        //intent中只能设置一个Action,如果设置两个  后面的会覆盖前面的Action
        intent.setAction("custom1");
        //category可以有多个但是必须要满足全部匹配才算成功
         intent.addCategory("category1");
        intent.addCategory("android.intent.category.DEFAULT");
        //如果既想设置Data 想设置Type  那么,只需要设置setDataAndtype即可
        intent.setDataAndType(Uri.parse("http://www.baidu.com"),"text/plain");
        startActivity(intent);
    }
}

      

你可能感兴趣的:(Activity的七大属性)