android Scheme使用 打开指定的Activity

1.在配置文件AndroidMenifest.xml文件中增加下配置

<intent-filter >
                <action android:name="android.intent.action.VIEW"/>     
                <category android:name="android.intent.category.DEFAULT"/>  
                <!-- 该值可以字符 使用的时候传送的Uri值的开头必须跟此值相同-->  
                <data android:scheme="test"/>
            </intent-filter>


注:上配置添加在需要使用Scheme控制启动的Activity下,例如:

<activity
            android:name="com.example.pushtest.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            
            <intent-filter >
                <action android:name="android.intent.action.VIEW"/>     
                <category android:name="android.intent.category.DEFAULT"/>  
                <!-- 该值可以字符 使用的时候传送的Uri值的开头必须跟此值相同-->
                <data android:scheme="test"/>
            </intent-filter>
            
        </activity>

2.在需要启动该Activity的地方传入Uri值,如下

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
//如非特别需求,只需保证"test"与配置中的Scheme值相同即可,"://"后面可以任意
intent.setData(Uri.parse("test"+"://112345678"));
startActivity(intent);


3.在需要启动的Activity中,如需要获取scheme及Uri的全路径,可以使用如下方法:

Intent intent = getIntent();
String scheme = intent.getScheme();//获取Scheme全名称
String uriPath = intent.getDataString();//获取Uri的全路径

例如,

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
//        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_main);

        String scheme = getIntent().getScheme();
        String uriPath = getIntent().getDataString();
        System.out.println("scheme::-->"+scheme+",uriPath:::"+uriPath);
        
    }





### 使用 Scheme 协议跳转到百度并执行搜索 要通过 `scheme` 协议实现自动打开百度 APP 并执行搜索操作,需要了解目标应用(即百度 APP)是否支持自定义 URL Scheme 以及其具体的参数结构。以下是详细的说明: #### 百度 APP 的 URL Scheme 支持情况 通常情况下,主流应用都会提供官方文档描述其支持的 URL Scheme 和 Universal Link 功能。对于百度 APP 来说,假设它支持 URL Scheme 跳转,则可能的形式如下所示[^1]: ``` baidu://search?word=关键词 ``` 其中: - `baidu://` 是百度 APP 注册的 Scheme 名称。 - `search` 表示请求的操作路径,这里是发起搜索。 - `word=关键词` 则表示传递给百度 APP 的查询参数。 需要注意的是,具体的支持细节需查阅百度开发者文档或联系百度技术支持团队确认。 #### 实现代码示例 以下是一个基于 Android 或 iOS 系统调用百度 APP 执行搜索的功能代码片段: ```java // Java (Android) 示例 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("baidu://search?word=测试")); try { startActivity(intent); // 尝试启动百度 APP } catch (ActivityNotFoundException e) { Toast.makeText(context, "未检测到已安装的百度 APP", Toast.LENGTH_SHORT).show(); } ``` 在上面的例子中,程序试图通过 `Uri.parse()` 方法构建一个指向百度 APP 的 URI 请求,并尝试启动该应用。如果设备上未安装百度 APP,则会捕获异常并提示用户。 #### 处理未安装的情况 当用户的设备尚未安装对应的目标应用时,可以考虑重定向至应用商店或者备用方案。例如,在未能成功跳转的情况下,可引导用户访问百度官网或其他替代服务完成相同功能[^4]。 ```javascript // JavaScript (Web 浏览器环境) 示例 function openBaiDuSearch(keyword) { const baiduAppUrl = 'baidu://search?word=' + encodeURIComponent(keyword); const fallbackUrl = 'https://www.baidu.com/s?wd=' + encodeURIComponent(keyword); window.location.href = baiduAppUrl; setTimeout(() => { if (!document.hidden) { // 如果页面仍然可见,意味着 App 没有被打开 window.location.href = fallbackUrl; } }, 250); } openBaiDuSearch('测试'); ``` 此脚本首先尝试加载百度 APP 的专属链接;若超时后发现当前窗口依旧处于前台状态,则推测 APP 启动失败,进而切换为 H5 页面继续展示结果。 --- ### 注意事项 尽管可以通过上述方式实现基本的需求满足,但在实际开发过程中仍可能存在一些局限性和挑战,比如不同机型/版本间的行为差异、安全性验证机制等问题都需要额外关注[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值