您的位置:58脚本 > android的intent Android Intent意

android的intent Android Intent意

2023-03-21 12:32 Android教程

android的intent Android Intent意

android的intent

Android Intent是Android系统中的一个重要概念,它是一种消息传递机制,可以在不同的应用程序之间传递数据和信息。Intent可以用来启动Activity、Service、BroadcastReceiver,也可以用来传递数据和信息。

Intent有两种形式:显式Intent和隐式Intent。显式Intent是直接向特定的Activity或者Service发出请求;而隐式Intent则是根据Action和Category来匹配对应的Activity或者Service。

// 显式 Intent 代码示例 
Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
startActivity(intent); 
 
// 隐式 Intent 代码示例 
Intent intent = new Intent("com.example.action.TEST"); 
intent.addCategory("android.intent.category.DEFAULT"); 
startActivity(intent);  

此外,Android还允许使用Bundle对象将数据传递到目标Activity或者Service中,Bundle对象可以存储多个键值对,并且可以存储多种不同的数据类型。

  // Bundle 存储数据代码示例  
 Bundle bundle = new Bundle();   // 创建 Bundle 对象  
 bundle.putString("name", "Tom"); // 存储 String 类型数据  
 bundle.putBoolean("isMale", true); // 存储 Boolean 类型数据  

 Intent intent = new Intent(MainActivity.this, SecondActivity.class);   // 创建 Intent 对象  

 intent.putExtras(bundle); // 把 Bundle 数据存入 Intent 对象中  

 startActivity(intent); // 跳转 Activity    

总之,Android中的Intent是一个重要的机制,它能够帮助我们在不同应用之间传递信息、启动新的应用、传递数据。使用正确的方法来使用它能够带来很大的好处。

Android Intent意图

intent是具有其相关联数据的动作。

Android使用Intents调用组件。Android中的组件包括

  • activities (UI组件),
  • services服务 (后台代码),
  • broadcast receivers广播接收器,
  • content providers内容提供者。

你可以使用intent来调用外部应用程序或内部组件。

你可以使用intent来引发事件,使别人可以以类似于发布-订阅模型的方式进行响应。

你可以使用intent引发警报。

例子

以下代码显示了如何使用Intent打开一个Activity。

假设你进行了以下活动:

public class BasicViewActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        ...
    }
}

然后,你在清单文件中注册这个activity,使其可供其他应用程序调用。

<activity android:name=".BasicViewActivity"
          android:label="Basic View Tests">
 <intent-filter>
   <action android:name="cn..intent.action.ShowBasicView"/>
   <category android:name="android.intent.category.DEFAULT" />
 </intent-filter>
</activity>

要使用intent调用此BasicViewActivity:

public static void invokeMyApplication(Activity parentActivity)
{
   String actionName= "cn..intent.action.ShowBasicView";
   Intent intent = new Intent(actionName);
   parentActivity.startActivity(intent);
}

注意

动作名称的一般约定是

<your-package-name>.intent.action.YOUR_ACTION_NAME

BasicViewActivity可以获取调用它的intent。

class BasicViewActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        ...
        ...
        Intent intent = this.getIntent();
        if (intent == null)
        {
            Log.d("test tag", "This activity is invoked without an intent");
        }
    }
}

Intent组合

intent有四个部分:

  • name
  • data
  • type
  • category

在Android中,intent通常是成对的:动作和数据。

该动作描述了要执行什么,例如编辑项目,查看项目的内容等等。

数据指定受影响的内容,例如联系人数据库中的人员。

数据被指定为Uri对象。

一些行动的例子如下:

  • ACTION_VIEW
  • ACTION_DIAL
  • ACTION_PICK

数据的一些示例包括以下:

  • www..cn
  • tel:+9991231234
  • geo:37.999900,-122.999970
  • content://contacts

动作和数据对描述了要执行的操作。

例如,要拨打电话号码,你将使用对 ACTION_DIAL/tel:+999234567

要显示存储在手机中的联系人列表,请使用对ACTION_VIEW/content://contacts

要从联系人列表中选择联系人,请使用对ACTION_PICK/content://contacts

使用intent category

你可以使用intent过滤器中的< category> 元素将activity分组。

AndroidManifest.xml文件:

          <?xml version="1.0" encoding="utf-8"?>
          <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="cn..Intents"
              android:versionCode="1"
              android:versionName="1.0" >

              <uses-sdk android:minSdkVersion="14" />
              <uses-permission android:name="android.permission.CALL_PHONE"/>
              <uses-permission android:name="android.permission.INTERNET"/>
              <application
                  android:icon="@drawable/ic_launcher"
                  android:label="@string/app_name" >
                  <activity
                      android:label="@string/app_name"
                      android:name=".IntentsActivity" >
                      <intent-filter >
                          <action android:name="android.intent.action.MAIN" />
                          <category android:name="android.intent.category.LAUNCHER" />
                      </intent-filter>
                  </activity>

                  <activity android:name=".MyBrowserActivity"
                            android:label="@string/app_name">
                      <intent-filter>
                          <action android:name="android.intent.action.VIEW" />
                          <action android:name="cn..MyBrowser" />
                          <category android:name="android.intent.category.DEFAULT" />
                          <category android:name="cn..Apps" />
                          <data android:scheme="http" />
                      </intent-filter>
                  </activity>

              </application>

          </manifest>

以下代码将直接调用MyBrowerActivity:

Intent i = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse ("http://www..cn"));
i.addCategory("cn..Apps");
startActivity(Intent.createChooser(i, "Open URL using..."));

如果省略 addCategory()语句,上述代码仍然会调用MyBrowerActivity,因为它仍然匹配默认类别 android.intent.category.DEFAULT

对于以下代码,它不匹配在intent过滤器中定义的类别,因此不会启动任何activity。

以下代码引用类别cn..OtherApps,它不匹配intent过滤器中的任何类别,因此如果不使用intent类的createChoose()方法,将会引发运行时异常。

Intent i = new Intent(android.content.Intent.ACTION_VIEW,Uri.parse ("http://www..cn"));
//i.addCategory("cn..Apps");
//this category does not match any in the intent-filter
i.addCategory("cn..OtherApps");
startActivity(Intent.createChooser(i, "Open URL using..."));

阅读全文
以上是58脚本为你收集整理的android的intent Android Intent意全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 58脚本 58jiaoben.com 版权所有 联系我们
桂ICP备12005667号-28 Powered by CMS