Scheme打开Activity

打开Activity的两种方式

打开Activity的方式基本可以分为两大类,显示打开和隐式打开。

显示启动

    Intent intent = new Intent();
    intent.setClassName(getPackageName(), getPackageName() + ".SecondActivity");
    startActivity(intent);

隐式启动

		//Androidmanifest.xml里面相关配置
      <activity
       android:name="com.ccg.demo.SecondActivity"
       android:label="第二个Activity" >
       <intent-filter>
       <action android:name="android.intent.action.startSecondActivity" />
       <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
       </activity>
   Intent intent = new Intent();
   intent.setAction("android.intent.action.startSecondActivity");
   intent.addCategory(Intent.CATEGORY_DEFAULT);
  startActivity(intent);
  ```

通过Scheme打开Activity

第二种隐式启动的方式不用明确指定对应的参数,因此如果我们想要通用H5来打开native的界面,就可以利用这种方式。步骤如下:

  • 1)、如在上面的Activity的配置里面,增加多下面配置
>        <intent-filter>
>        <action android:name="android.intent.action.startSecondActivity" />
>        <category android:name="android.intent.category.DEFAULT" />
>        <data
>            android:scheme="schemetest"
>            android:host="host1"
>            android:path="/path"
>            android:port="8080" />
>        </intent-filter>
  • 2)、执行对应的scheme
<!DOCTYPE html>  
<html>  
<body>
<h1>Scheme Demo</h1> 
<a href="schemetest://host1:8080/path1">Click</a>
</body>  
</html>

如上,WEB端就可以通过调用“schemetest://host1:8080/path1“来打开这个SecondActivity。注意,scheme和host 这两个在使用的时候是必须配置的,其他的可以随意。

实现原理

如果我们不设置webviewclient,在webview执行上面跳转的时候,会交给系统处理,因为系统拥有每个应用的Androidmanifest.xml文件,在执行以上scheme的时候,系统就会主动去寻找是否存在匹配的activity,如果存在的话,就会执行打开操作。但我们一般在使用webview 的时候,都会设置webviewclient,因此希望这scheme能够正常响应的话,需要我们在shouldOverrideUrlLoading方法里面执行判断处理,

wv.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    String scheme = Uri.parse(url).getScheme();
    if (TextUtils.equals("schemetest", scheme)) {
         Uri uri=Uri.parse(url);  
		Intent intent=new Intent(Intent.ACTION_VIEW,uri);  
		startActivity(intent);  
        return true;
    }
    return false;
    }
});
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值