Android从一个APP跳转到另一个APP的主界面或某页面,并传递数据

本文介绍如何实现Android应用程序之间的跳转,并通过Intent携带数据。具体包括使用Intent.ACTION_MAIN进行基本跳转、设置exported属性以允许跨应用访问特定Activity以及利用Bundle在活动中传递数据。

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

1. Android 从一个 APP 跳转到另一个 APP 主界面

        Intent intent = new Intent(Intent.ACTION_MAIN);
        //前提:知道要跳转应用的包名、类名
        ComponentName componentName = new ComponentName("com.example.hust_twj.secondapp", "com.example.hust_twj.secondapp.MainActivity");
        intent.setComponent(componentName);
        startActivity(intent);

本 Demo 包括 2 个测试的 APP ,FirstApp 主界面有 2 个按钮,分别进入 SecondApp 的主界面和某指定的界面;而SecondApp 主界面仅有一个登陆的按钮,点击该按钮可以进入登陆界面。

从 FirstApp 进入 SecondApp 的主界面跳转截图(代码如上):


这里写图片描述

2. Android 从一个 APP 跳转到另一个 APP 的某 activity

(1) 把要跳转的目标 APP 的指定 activity 暴露出来
在 AnroidManifest 文件中给 activity 节点设置 Android:exported="true",该属性表示当前 activity 能否被另外一个Application 的组件启动,true允许启动,false不允许。默认是false。注意:该属性是四大组件都拥有的。

      <activity
          android:name=".LoginActivity"
          android:exported="true">
      </activity>

(2) 启动/跳转

        Intent intent = new Intent();
        intent.setClassName("com.example.hust_twj.secondapp", "com.example.hust_twj.secondapp.LoginActivity");
        startActivity(intent); 

第一个参数是目标 APP 的包名,第二个参数是目标 APP 的 activity 的全称。如果目标 APP 的 activity 没有暴露入口,则会报权限禁止错误。

从 FirstApp 进入SecondApp 的某指定界面(登陆界面):


这里写图片描述

3. 跳转时使用 Bundle 传递数据

在 FirstApp 中使用 Bundle 传递数据:

  public void go2Main(View view){
        ComponentName componentName = new ComponentName("com.example.hust_twj.secondapp","com.example.hust_twj.secondapp.MainActivity");
        Intent intent = new Intent();
        Bundle bundle = new Bundle();
        bundle.putString("FIRST_APP_KEY", "你好 ,MainActivity");
        intent.putExtras(bundle);
        intent.setComponent(componentName);
        startActivity(intent);
    }

    public void go2Login(View view){
        Intent intent = new Intent();
        intent.setClassName("com.example.hust_twj.secondapp", "com.example.hust_twj.secondapp.LoginActivity");
        Bundle bundle = new Bundle();
        bundle.putString("FIRST_APP_KEY", "你好 ,LoginActivity");
        intent.putExtras(bundle);
        startActivity(intent);
    }

在 SecondApp 中,假如 MainActivity 和 LoginActivity 都有 TextView 用于显示从 FirstApp 中传过来的数据(本 Demo 中没有 TextView ),那么在 MainActivity 和 LoginActivity 中接收数据如下:

        TextView mTextView = (TextView) findViewById(R.id.tv_main);
        Bundle bundle = this.getIntent().getExtras();
        if (bundle != null){ //防止直接启动MainActivity时空指针闪退
            String value = bundle.getString("FIRST_APP_KEY");
            mTextView.setText(value);
        }

至此, APP 间的跳转及传递数据就结束啦~

### 实现 Flask 后端与 Vue 前端集成中的搜索功能路由跳转 在构建基于 Flask 和 Vue 的单页应用程序 (SPA) 时,实现从主页面通过搜索功能跳转到子页面的功能涉及多个方面。以下是完整的解决方案。 #### 配置 Vue Router 使用 History Mode 为了使 Vue 应用能够正常处理前端路由而不触发后端的 404 错误,需将 `vue-router` 设置为 **HTML5 History 模式**。这种模式下,URL 不再带有 `#` 符号,而是采用标准路径形式(如 `/search/:query`)。 修改 Vue 中的路由配置文件: ```javascript import { createRouter, createWebHistory } from 'vue-router'; const routes = [ { path: '/', name: 'Home', component: () => import('@/views/Home.vue') // 主页面组件 }, { path: '/search/:query', // 动态参数 :query 表示搜索关键词 name: 'SearchResults', component: () => import('@/views/SearchResults.vue') // 子页面组件 } ]; const router = createRouter({ history: createWebHistory(), // 使用 HTML5 History 模式 routes }); export default router; ``` 此设置允许用户输入 URL 点击链接直接进入特定页面[^1]。 --- #### 修改 Flask 后端支持 SPA 路由 当启用 `history mode` 后,所有未匹配的 API 请求应被重定向至前端入口文件 (`index.html`)。为此,在 Flask 中调整默认路由逻辑: ```python from flask import Flask, send_from_directory app = Flask(__name__, static_folder='./dist/static', template_folder='./dist') @app.route('/', defaults={'path': ''}) @app.route('/<path:path>') def catch_all(path): return app.send_static_file('index.html') if __name__ == '__main__': app.run(debug=True) ``` 上述代码确保无论客户端请求哪个路径,只要不是有效的静态资源 API 接口,都会返回 `index.html` 文件。 --- #### 构建搜索功能完成路由跳转 假设主界面上有一个简单的搜索框用于接收用户的查询词,则可以通过绑定事件监听器来动态导航至目标页面。例如,在 Home 组件中定义方法: ```html <!-- Home.vue --> <template> <div> <input v-model="searchQuery" placeholder="请输入关键字..." /> <button @click="handleSearch">搜索</button> </div> </template> <script> export default { data() { return { searchQuery: '' }; }, methods: { handleSearch() { if (this.searchQuery.trim()) { this.$router.push(`/search/${encodeURIComponent(this.searchQuery)}`); // 编码特殊字符以防解析失败 } } } }; </script> ``` 到达的目标页面可以根据传递过来的参数加载对应的数据展示给用户。比如 SearchResults 页面可以从 Vuex Store 获取数据者发起新的 HTTP 请求获取结果列表。 ```html <!-- SearchResults.vue --> <template> <div> <h1>搜索 "{{ $route.params.query }}" 结果:</h1> <!-- 展示搜索结果区域 --> </div> </template> <script> export default { computed: { query() { return decodeURIComponent(this.$route.params.query); } }, mounted() { console.log(`当前搜索关键词为 "${this.query}"`); // 可在此处调用接口拉取关联数据... } }; </script> ``` --- ### 总结 以上方案涵盖了从前端 Vue 到后端 Flask 完整的工作流设计,解决了因历史记录模式引发的服务端适配问题以及实际业务场景下的交互需求满足过程。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值