Intent的显式意图和隐士意图

显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。即组件的包名、组件名、组件的class。
隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。
显示意图非常常用也非常简单一般用于应用程序内之间Activity的相互调用转换,就不多说了,这里我介绍一下隐式意图:
简单概括就是: 意图包括:Action(动作),Category(附加信息),Data(数据,具体内容),Tpye(类型)等等,举个例子,说白了意图就是启动一个组件的的完整的动作信息,就像打人,打就是Action动作,人就是Data内容,而Type就是类型,打什么人呢?打坏人,type就是坏指的类型,只有这些信息全了才能执行一个完整的意图,当然还有一些信息,比如scheme就是URI类型的数据的前缀,就像这个例子当中的sms:,还有host主机名,path路径等。

显示调用系统的intent的例子

package com.example.testnetconnect;

import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  //测试系统的网络是否连接
  
  ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo info = cm.getActiveNetworkInfo();
  if(info!=null&&info.isConnected()){
   Toast.makeText(this, "网络是连接的", 1).show();
  }else{
   Toast.makeText(this, "网络没有连接", 1).show();
   Intent intent = new Intent();
   //设置包名,和类名cmp=com.android.settings/.SubSettings
   intent.setClassName("com.android.settings", "com.android.settings.SubSettings");
   startActivity(intent);
  }
 }

 }

 隐式调用系统浏览器的例子:

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 }
 public void click(View view){
  Intent intent = new Intent();
  //隐士意图:定义操作的行为,找一个最适合的对象来执行
  intent.setAction(Intent.ACTION_VIEW);
  intent.setData(Uri.parse("https://www.baidu.com"));
  startActivity(intent);
 }

显示意图和隐式意图的应用场景:

显示意图:同一个应用程序自己激活自己的东西,推荐使用显示意图。

隐式意图:不用应用程序中,激活别人的应用或者自己的应用被别人激活,使用隐式意图。例如查询系统所有的activy是不是满足的条件的activy。

如果有判断多少个,1个直接启动,如果有多个,列表的方式

如果没有应用程序异常终止。

 

 

你可能感兴趣的:(Android学习)