Activity跳转 123

一、显式调用方法

 

1.方法一

Intent intent=new Intent(本类,将要跳转的类); 
startActivity(intent);

 见Intent.class 源码:

----------------------------------------------------------------------------------------------------------------------------------public Intent(Context packageContext, Class<?> cls) {
mComponent = new ComponentName(packageContext, cls);
}

----------------------------------------------------------------------------------------------------------------------------------

2.方法二

Intent intent2=new  Intent();
intent2.setClass(本类,将要跳转的类); 
startActivity(intent2);

见Intent.class 源码: 

------------------------------------------------------------------------------------------------------------------------------------

public Intent setClass(Context packageContext, Class<?> cls) {
    mComponent = new ComponentName(packageContext, cls);
    return this;
}

-------------------------------------------------------------------------------------------------------------------------------------

3.方法三

Intent intent2=new  Intent();
intent2.setClassName(本类,将要跳转的类的包名); 
startActivity(intent2);

见Intent.class 源码: 

------------------------------------------------------------------------------------------------------------------------------------

public Intent setClassName(Context packageContext, String className) {
    mComponent = new ComponentName(packageContext, className);
    return this;
}

-------------------------------------------------------------------------------------------------------------------------------------

划重点 

方法三里有一个的参数类型变了    Context      &         String 

回到源码

@param className       

The name of a class inside of the application package that will be used as the component for this Intent.

4.方法四

Intent intent2=new  Intent();
intent2.setClassName(包名,将要跳转的类的包名); 
startActivity(intent2);

见Intent.class 源码: 

------------------------------------------------------------------------------------------------------------------------------------

public Intent setClassName(String packageName, String className) {
    mComponent = new ComponentName(packageName, className);
    return this;
}

-------------------------------------------------------------------------------------------------------------------------------------

 

划重点 

方法三里有二个参数类型变了    String  & String

回到源码

@param packageName 
The name of the package implementing the desired component. 

@param className 
The name of a class inside of the application package that will be used as the component for this Intent.

5.方法五

Intent intent2=new  Intent();
intent2.setComponent(new ComponentName(MainActivity.this, JumpToActivity.class));
startActivity(intent2);

见Intent.class 源码: 

------------------------------------------------------------------------------------------------------------------------------------

public Intent setComponent(ComponentName component) {
    mComponent = component;
    return this;
}

-------------------------------------------------------------------------------------------------------------------------------------

发现没有  所有跳转都指向了一个    ComponentName  的东西 。。

ComponentName,顾名思义,就是组件名称,这个类主要用来定义一个应用程序的组件,通过调用Intent中的setComponent方法,我们可以打开同个应用以及不同应用中的组件。例如:Activity,Service。

传送门开启  https://blog.csdn.net/weixin_41953808/article/details/81613199

 

二、隐式调用方法

 

1.action跳转

Intent intent = new Intent();  
intent.setAction("con.yy.test.jump");  
startActivity(intent);

在AndroidManifest.xml中设置 将要跳转到的Activity 的action

<activity android:name=".MainActivity" >  
    <intent-filter>  
        <action android:name="con.yy.test.jump"/>  
        <category android:name="android.intent.category.DEFAULT" />  
    </intent-filter>  
</activity>

 2.通过Scheme 跳转协议跳转

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("yy://baiduSina:99hh?dd=wo")); 
startActivity(intent);

见Intent.class 源码: 

------------------------------------------------------------------------------------------------------------------------------------

public Intent(String action, Uri uri) {
    setAction(action);
    mData = uri;
}

-------------------------------------------------------------------------------------------------------------------------------------

setAction(action) 通过action跳转;

mData = uri   跳转到哪

先set 一个 Action  ,有set 一个 uri  很清晰的 Android 的 跳转 or 启动的套路

 

在AndroidManifest.xml中<activity />标签增加<intent-filter />过滤器:

<activity
    android:name=".GoodsDetailActivity"
    android:theme="@style/AppTheme">
 
         <intent-filter>
         <!--协议部分,随便设置-->
             <data 
                android:scheme="yy" 
                android:host="baidusina" 
                android:path="/hh" 
                android:port="8080"/>

             <!--下面这几行也必须得设置-->
             <category android:name="android.intent.category.DEFAULT"/>
             <action android:name="android.intent.action.VIEW"/>
             <category android:name="android.intent.category.BROWSABLE"/>
             </intent-filter>
 </activity>

<intent-filter />过滤器 中 data便签,便是url的配置;

注意path这个参数,一定要先 / 在跟路径

划重点 

"yy://baiduSina:99/hh?dd=wo

URL Scheme协议格式: 

scheme:   // host :              port   / path **

模式:        // 主机 :              端口  / 路径 **

"yy:         // baiduSina:     99     /hh?dd=wo

 

附加:

1.网页使用 scheme:

<a href="yy://baidusina:99/hh?dd=wo">

biubiu

</a>

 

2.跳转后新页面怎么获取传递参数

Uri uri = getIntent().getData();

String id = uri.getQueryParameter("id") 

3.判断一个Scheme是否有效

PackageManager packageManager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("yy://baidu:99/hh?dd=wo"));
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isValid = !activities.isEmpty();
if (isValid) {
    startActivity(intent);
}

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值