<Android>启动外部程序

本文详细介绍了在Java程序中启动外部应用程序的方法,包括通过包名、包类名及特定Action启动应用,并提供了检测应用是否已安装的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

启动外部程序

 

1.通过包名启动(只能启动外部程序中Launcher的Activity)

通过自己编写的程序启动另一个已安装的应用程序。

PackageManager packageManager = Start_RemoveSoftActivity.this.getPackageManager(); 

Intent intent = packageManager.getLaunchIntentForPackage(“应用程序包名");(即你想启动的应用程序中AndroidManifest.xml中package的参数值)

你可以在intent中添加想要的data以及action参数,使启动的应用程序可以获取相应的参数信息。

你也可以在启动前,获取PackageInfo,来检测你想启动的应用程序是否已经安装,如果没有安装可以弹出友好提示。 

 

2.通过包类名

Intent i = new Intent();   

// 01.通过指定包类名,不需要修改被调用程序   

i.setClassName("com.android.test2""com.android.test2.Test2");   

// 使用Component,效果和上面是一样的   

// i.setComponent(new ComponentName("com.android.test2", "com.android.test2.Test2"));    

 

3.通过Action

// 同时需要修改被调的Activity所在应用中的manifest文件,在其intent-filter中添加上:  

// <action android:name="com.android.test2.action.Test2"> <!-- 对应下面setAction的值 -->  

// <category android:name="android.intent.category.DEFAULT" /> <!-- 必须添加 -->  

i.setAction("com.android.test2.action.Test2");   

 

 

 

 

 

### 权限声明与查询配置的作用 #### 1. **`<uses-permission>` 节点的功能** 该标签用于表明应用程序需要哪些权限来访问受保护的系统功能或其他应用的数据。当一个应用尝试执行某些操作(如网络通信、写入外部存储等),它必须先在 `AndroidManifest.xml` 文件中声明所需的权限[^2]。 例如,在请求发送粘滞广播的能力时,可以如下所示进行声明: ```xml <uses-permission android:name="android.permission.BROADCAST_STICKY"/> ``` 这表示当前应用打算行使 “允许程序广播粘滞意图” 这一特权[^1]。 对于自定义权限如 `intelligent.permission.SHARE_INTENT` 或者 `intelligent.permission.EXECUTE_INTENT` ,同样也需要通过 `<uses-permission>` 声明以告知系统本应用期望获取这些特定能力的支持。如果没有正确添加此条目,则即使目标服务提供了对应接口也无权调用成功[^3]。 #### 2. **`<queries>` 节点的意义及用途** 从 Android 11 (API level 30) 开始新增加了一个叫做 Queries 的部分用来管理包可见性规则(Package Visibility Rules)[^4] 。这意味着如果您的 App 需要与其他 Apps 发生交互的话(比如启动另一个 Activity ,绑定 Service 等),那么就需要明确指出您所关心的服务或者活动属于哪一类软件产品集合之内. 具体而言, 当我们需要查找是否存在名为 IntelligentIntent 的 Content Provider 并与其建立联系之前, 可能会面临这样的情况: 如果不加以限制地列举所有可能匹配的对象列表将会导致性能下降以及潜在安全隐患等问题发生 .因此借助于 < queries > 元素可以帮助过滤掉无关紧要的信息源从而提高效率同时保障安全性 . 下面是一个例子演示了如何针对前面提到过的两个自定义权限去构建合适的 query 表达式 : ```xml <queries> <!-- For SHARE_INTENT --> <intent> <action android:value="intelligent.intent.action.SHARE" /> <category android:name="android.intent.category.DEFAULT" /> </intent> <!-- For EXECUTE_INTENT --> <provider android:authorities="com.intelligent.provider.execute"> <meta-data android:name="permissions_required" android:value="intelligent.permission.EXECUTE_INTENT"/> </provider> </queries> ``` 在这里面第一个 intent 定义了一组动作模式(Action Pattern),第二个 provider 则指定权威名称(Authority Name)连同附加元数据一起构成了完整的查询条件集 合[^5]. --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值