Android中Intent方法的显式\隐式启动

以实际demo为例,演示Intent信息传递方法的显\隐示启动。

1.新建SecondActivity

在MainActivity的基础上,com.example.myapplication下新建一个SecondActivity,并设计其布局:

2.定义两个Activity 

首先,确保在 AndroidManifest.xml 文件中定义了两个Activity。例如,MainActivity 和 SecondActivity,设定前者为默认启动:

3.在 MainActivity 中启动 SecondActivity 

 

MainActivity中设计了Button元素,在主活动类中,设计点击操作调用SecondActivity。

(1)Intent显示启动

由于不同组件之间的交互,这里采用了Intent的显示启动(应用内部、应用之间的信息传递):

 

(2)Intent隐式启动

相对的,隐式启动间接通过AndroidManifest.xml中设置的Intent的action、category、data等属性来筛选启动的目标Activity:

<!-- <intent-filter> 定义LAUNCHER启动和MAIN主要Activity(常规有且只有一个) -->
<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<!-- <intent-filter> 自定义action的操作 -->

<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.example.myapplication.secondaction" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

设置好后在主活动类中调用:

NOTING:隐式Intent启动其他应用的Activity时,需要确保目标应用已经安装在设备上,并且有一个Activity能够响应这个Intent,否则,startActivity()方法将不会启动任何Activity,并可能返回一个ActivityNotFoundException异常。为了避免上述情况,可以使用resolveActivity()方法或queryIntentActivity()方法来检查是否有能够响应这个Intent的Activity。 

//创建一个Intent,假设我们想要打开浏览器
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));

//使用resolveActivity()方法来检查是否有Activity能够处理该Intent
PackageManager packageManager = getPackageManager();
if (intent.resolveActivity(packageManager) != null){
    //有Activity可以处理该Intent
    startActivity(intent);
}else{
    //没有Activity可以处理该Intent
    Toast.makeText(this, "No application can handle this requeest",Toast.LENGTH_LONG).show
}

//使用queryIntentActivities()方法来获取所有能够处理该IntentActivity
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.querylIntentActivities(intent, 0);
if (activities.size() > 0) {
    //有Activity可以处理该Intent
    for (ResolveInfo resolveInfo : activities) {
         //打印每个Activity的信息
         String activityName = resolveInfo.activityInfoname;
         String packageName = resolveInfo.activityInfo.packageName
         Log.d("Available Activity", "Activity: " + activityName + ", Package:" + packageN
}
//启动第一个找到的Activity
    startActivity(intent);
} else {
    //没有Activity可以处理该Intent
    Toast.makeText(this, "No application can handle thisrequest", Toast.LENGTH_LONG).show
}

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值