你的位置:首页 > 操作系统

[操作系统]Android 之 Intent(意图)


   Intent是 Android中重要的桥梁之一,它分为显式意图和隐式意图。接下来分别针对这两种意图进行讲解。

  • 显式意图:通过指定一组数据或动作,激活应用内部的 activity;(相比隐式意图,此做法更安全)
Intent intent = new Intent(); intent.setClass(MainActivity.this,Main2Activity.class); //第一个参数指的就是要跳转的那个Activity;第二个指的是跳到的那个Activity startActivity(intent); //如果没有回调的时候直接这样就OK 或者Intent intent = new Intent(); intent.setClassName("com.sd.study.test_01","com.sd.study.test_02"); //第一个参数指的就是要跳转的那个Activity的包名;第二个指的是跳到的那个Activity的包名 startActivity(intent);或者Intent intent = new Intent(this,Main2Activity.class);//第一个参数指的就是要跳转的那个Activity;第二个指的是跳到的那个Activity  startActivity(intent);

  

  • 隐式意图:通过指定具体的包名和类名,打开另一个程序的 Activity。
//实现跳转的功能Intent intent = new Intent();//设置跳转的动作intent.setAction(" 清单文件中目标activity的name ");//设置 categoryintent.addCategory(" 清单文件中目标activity的category ");//开启 Activity (如果需要加权限记得加上)startActivity(intent);  //实现拨打电话的功能Intent intent = new Intent();//设置拨打的动作intent.setAction(" 清单文件中目标activity的name");//设置拨打的数据intent.setData(Uri.parse("tel:"+119));//开启 Activity (如果需要加权限记得加上)startActivity(intent);

  

//清单文件<application  android:name=".MyApp"  android:allowBackup="true"  android:icon="@mipmap/ic_launcher"  android:label="@string/app_name"  android:supportsRtl="true"  android:theme="@style/AppTheme">  <activity android:name=".MainActivity">    <intent-filter>      <action android:name="android.intent.action.MAIN" />      <category android:name="android.intent.category.LAUNCHER" />    </intent-filter>  </activity>  <activity android:name=".Main2Activity"> // " 清单文件中目标activity的name "                       // " 清单文件中目标activity的category "  </activity></application>


  • Android数据传递与回传
//第一个Activitypublic class MainActivity extends Activity { private Button btn ;   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     btn = (Button)findViewById(R.id.button);    //设置单击事件    btn.setOnClickListener(new OnClickListener() {       @Override       public void onClick(View v) {         Intent intent = new Intent();          intent.setClass(mainActivity.this,main2Activity.class); //第一个参数指的就是要跳转的那个Activity;第二个指的是跳到的那个Activity         intent.putExtra("str1", "hello world");         intent.putExtra("str2", "你好,世界");         //如果没有回调也不用重写这个方法        startActivityForResult(intent, 1);       }     });   }}//第二个Activitypublic class Main2Activity extends Activity {   protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.activity_main);      btn = (Button)findViewById(R.id.button);      Intent intent = this.getIntent();      Bundle bundle = intent.getExtras();     //根据"键值对"取值     String str1 = bundle.getString("str1");      String str2 = bundle.getString("str2");     //按钮的点击事件     btn.setOnClickListener(new OnClickListener() {        @Override        public void onClick(View v) {          Intent intent = new Intent();          intent.putExtra("str3", "Back Data");          setResult(0, intent); //设置返回值          finish(); //调用这个方法,此Activity关闭,并把它从栈中移除。然后进入到前一个Activity       }     });   } } 


    • 数据传递

      • putExtra(); //可以传递8种基本数据类型;

      • Bundle(); //可以传递8种基本数据类型;

    • 回传数据  

      • a. 调用者Activity开启新的界面选用  startActivityForResult();

startActivityForResult(intent, 1); //如果没有回调则不用重写这个方法




      • b. 在新开启的Activity中设置返回值    

Intent intent = new Intent();intent.putExtras();setResult();//设置返回值


      • c. 操作关闭  finish();    
      • d. 在调用者Activity 中调用onActivityResult(); 方法