android:intnet

本文详细解释了Android中的Intent概念及其在不同Activity间切换和数据传递的应用,包括Intent的构造函数、如何使用Intent实现Activity间的跳转及数据共享,并通过示例代码演示了实际操作。

一、什么是Intent?

Intent的中文意思是目的。在Android中也是“目的”的意思。就是我们要去哪里,从这个activity要前往另一个Activity就需要用到Intent。

示例代码一:

   1: //定义一个Intent
   2: Intent intent = new Intent(IntentDemo.this, AnotherActivity2.class);
   3: //启动Activity
   4: startActivity(intent);

以上示例代码的作用是从IntentDemo这个activity切换到AnotherActivity2。这是Intent其中一种构造方法,指定两个Activity。为什么需要指定两个活动呢?因为在Android中有一个活动栈,这样的构造方式才能确保正确的将前一个活动压入栈中,才能在触发返回键的时候活动能够正确出栈。

注意:所有的Activity都必须先在AndroidManifest.xml里面配置声明。一下为本文用到的程序配置文件

   1: <?xml version="1.0" encoding="utf-8"?>
   2: <manifest xmlns:android="http://schemas.android.com/apk/res/android"
   3:     package="com.halzhang.android.intent" android:versionCode="1"
   4:     android:versionName="1.0">
   5:     <application android:icon="@drawable/icon" android:label="@string/app_name">
   6:         <activity android:name=".IntentDemo" android:label="@string/app_name">
   7:             <intent-filter>
   8:                 <action android:name="android.intent.action.MAIN" />
   9:                 <category android:name="android.intent.category.LAUNCHER" />
  10:             </intent-filter>
  11:         </activity>
  12:         <activity android:name=".AnotherActivity" android:label="another">
  13:             <intent-filter>
  14:                 <action android:name="android.intent.action.EDIT" />
  15:                 <!-- category一定要配置,否则报错:找不到Activity -->
  16:                 <category android:name="android.intent.category.DEFAULT" />
  17:             </intent-filter>
  18:         </activity>
  19:  
  20:         <activity android:name=".AnotherActivity2" android:label="another2">
  21:             <intent-filter>
  22:                 <action android:name="android.intent.action.EDIT" />
  23:                 <category android:name="android.intent.category.DEFAULT" />
  24:             </intent-filter>
  25:         </activity>
  26:     </application>
  27:     <uses-sdk android:minSdkVersion="3" />
  28:     <!-- 
  29:         上面配置的两个activity具有相同的action类型,都为“android.intent.action.EDIT”
  30:         当Intent的action属性为Intent.ACTION_EDIT时,系统不知道转向哪个Activity时,
  31:         就会弹出一个Dialog列出所有action为“android.intent.action.EDIT”的
  32:         Activity供用户选择
  33:      -->
  34: </manifest> 

二、Intent的构造函数

公共构造函数:

1、Intent() 空构造函数

2、Intent(Intent o) 拷贝构造函数

3、Intent(String action) 指定action类型的构造函数

4、Intent(String action, Uri uri) 指定Action类型和Uri的构造函数,URI主要是结合程序之间的数据共享ContentProvider

5、Intent(Context packageContext, Class<?> cls) 传入组件的构造函数,也就是上文提到的

6、Intent(String action, Uri uri, Context packageContext, Class<?> cls) 前两种结合体

Intent有六种构造函数,3、4、5是最常用的,并不是其他没用!

Intent(String action, Uri uri)  的action就是对应在AndroidMainfest.xml中的action节点的name属性值。在Intent类中定义了很多的Action和Category常量。

示例代码二:

   1: Intent intent = new Intent(Intent.ACTION_EDIT, null);
   2: startActivity(intent);

示例代码二是用了第四种构造函数,只是uri参数为null。执行此代码的时候,系统就会在程序主配置文件AndroidMainfest.xml中寻找

<action android:name="android.intent.action.EDIT" />对应的Activity,如果对应为多个activity具有<action android:name="android.intent.action.EDIT" />此时就会弹出一个dailog选择Activity,如下图:

device 如果是用示例代码一那种方式进行发送则不会有这种情况。

三、利用Intent在Activity之间传递数据

在Main中执行如下代码:

   1: Bundle bundle = new Bundle();
   2: bundle.putStringArray("NAMEARR", nameArr);
   3: Intent intent = new Intent(Main.this, CountList.class);
   4: intent.putExtras(bundle);
   5: startActivity(intent);

在CountList中,代码如下:

   1: Bundle bundle = this.getIntent().getExtras();
   2: String[] arrName = bundle.getStringArray("NAMEARR");

以上代码就实现了Activity之间的数据传递!

<think>好的,我现在需要回答用户关于如何使用Auto.js通过Intent和App名称启动应用程序的问题,并且需要提供示例代码。首先,我需要回忆Auto.js的基本用法以及它在Android自动化中的应用。Auto.js是一个基于JavaScript的自动化工具,可以用于模拟用户操作,比如点击、滑动等,同时也能执行更高级的任务,比如启动其他应用。 用户的问题提到使用Intent和App名称来启动应用。在Android中,启动应用通常有两种方式:显式Intent和隐式Intent。显式Intent需要明确指定目标应用的包名和Activity类名,而隐式Intent则是通过指定Action、Category等来让系统选择合适的应用。用户可能希望两种方式都能覆盖,所以我需要分别给出示例。 首先,我需要确认Auto.js是否支持直接调用Android的Intent API。根据之前的经验,Auto.js提供了`app.startActivity`方法,可以传入参数来启动Activity。同时,对于显式启动,可能需要使用包名,而隐式启动可能需要设置Action或Category等信息。 接下来,我需要查找相关的示例代码。例如,显式启动可能需要指定包名和Activity名,比如启动微信的com.tencent.mm包下的某个Activity。隐式启动可能需要设置Action为VIEW,或者使用包名来启动默认Activity。 然后,我需要考虑如何通过App名称来启动应用。这里可能需要先通过应用名称获取对应的包名,然后使用显式Intent启动。例如,使用`app.getPackageName(appName)`来获取包名,但需要确认Auto.js是否有这样的API。或者可能需要使用`app.launch(packageName)`来直接启动应用,这可能更简单。 另外,用户提供的引用中有关于隐式Intent启动Activity的示例,比如引用[3]中的XML布局有一个按钮,用于启动隐式Intent的Activity。这可能对应在Auto.js中模拟点击该按钮,但用户更希望直接通过代码启动,而不是模拟UI操作。 还需要注意,Auto.js的版本可能影响可用的API。例如,某些函数在Auto.js 4.0之后可能有变化,需要确保提供的代码适用于常见的版本。 现在,我需要组织这些信息,给出显式和隐式启动的示例代码。显式启动可能使用包名和Activity类名,而隐式启动可能使用Action或包名对应的默认Activity。同时,对于通过应用名称获取包名,可能需要使用Auto.js的内置函数,或者提醒用户如何查找包名。 最后,要确保代码正确,比如正确使用逗号分隔参数,正确引用字符串,以及处理可能的异常情况,比如应用未安装时的错误处理。</think>以下是如何使用Auto.js通过显式/隐式Intent和APP名称启动应用的解决方案: ### 一、显式Intent启动(推荐方式) ```javascript // 通过包名启动主Activity let packageName = "com.tencent.mm"; // 微信包名 app.startActivity({ packageName: packageName, className: packageName + ".ui.LauncherUI" // 主Activity路径 }); // 简写方式(自动启动主Activity) app.launch(packageName); ``` ### 二、隐式Intent启动 ```javascript // 通过Action启动浏览器 app.startActivity({ action: "android.intent.action.VIEW", data: "https://www.example.com" }); // 通过包名隐式启动(需知道默认Activity) app.startActivity({ packageName: "com.android.browser", className: "com.android.browser.BrowserActivity" }); ``` ### 三、通过APP名称启动(需先获取包名) ```javascript // 获取应用列表并过滤名称 let appName = "微信"; let package = app.getPackageName(appName); if(package){ app.launch(package); }else{ toast("应用未安装"); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值