算法
-
冒泡排序
-
选择排序
-
快速排序
-
二叉树查找: 最大值、最小值、固定值
-
二叉树遍历
-
二叉树的最大深度
-
给予链表中的任一节点,把它删除掉
-
链表倒叙
-
如何判断一个单链表有环
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
3.1.1 系统包管理器方式
- 当前APP加入获取权限声明:(不加入权限检查,没法启动目标app)
<uses-permission android:name="android.permission.QUERY\_ALL\_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
<uses-permission android:name="android.permission.LAUNCH\_APP" />
- 执行APP跳转
String packageName = "com.target.package"; // 目标应用的包名
PackageManager packageManager = getPackageManager();
Intent intent=new Intent();
intent = packageManager.getLaunchIntentForPackage(packageName);
if(intent==null){
Toast.makeText(MainActivity.this, "未安装", Toast.LENGTH\_LONG).show();
}else{
startActivity(intent);
}
- 目标APP处理
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE\_NO\_TITLE);
initWindows(this);
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (intent != null && intent.hasExtra("message")) {
String message = intent.getStringExtra("message");
IntentModule.message = message;
IntentModule.getMessage();
}
}
3.1.2 Intent隐式调起方式
当前APP做如下处理:
Intent intent2 = new Intent();
intent2.setAction("定义的action,要与后面B中使用的保持一致");
intent2.putExtra("data","传递的数据");
startActivity(intent2);
目标APP AndroidManifest.xml
配置文件做如下处理:
<activity android:name="要跳转的指定类">
<intent-filter>
<action android:name="定义的action,要与前面A中的保持一致"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
目标APP参数处理逻辑如下:
Intent intent = this.getIntent();
if(null != intent.getStringExtra("data")){
//处理数据
}
3.1.3 通过 ComponentName 类实现
当前APP做如下处理:
Intent intent1 = new Intent();
ComponentName name = new ComponentName("应用B的包名","应用B中跳转到的activity的全路径");
intent1.setComponent(name);
intent1.putExtra("data","传递的数据");
startActivity(intent1);
目标APP AndroidManifest.xml
配置文件对应的Activity
下添加 android:exported="true"
表示允许其它应用调用当前组件;
目标APP参数处理逻辑如下:
Intent intent=this.getIntent();
if(null != intent.getStringExtra("data")){
//处理数据
}
3.2 从一个APP跳转到另外一个目标APP,并传参
- 执行APP
AndroidManifest.xml
设置。
android:exported="true"
- 执行APP跳转
Intent intent = new Intent(Intent.ACTION\_MAIN);
/\*\*知道要跳转应用的包命与目标Activity\*/
ComponentName componentName = new ComponentName("com.demo.demo", "com.demo.ui.main.DemoActivity");
intent.setComponent(componentName);
intent.putExtra("salesNo", "参数1");
intent.putExtra("code", "参数2");
startActivity(intent);
- 目标APP
AndroidManifest.xml
设置。
android:exported="true"
android:launchMode="singleInstance"
- 目标APP在
onCreate
方法中接收传值:
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String salesNo = "";
String code = "";
if (bundle != null) {
salesNo = bundle.getString("salesNo");
code = bundle.getString("code");
}
3.2.1 为什么 intent.getStringExtra() 总是返回 null ?
实操过程中,有的同学可能会遇到应用intent.getStringExtra()
返回null
的情形。出现返回null
的原因可能有以下几种:
- 没有正确设置
Intent
传递的数据
可能使用putExtra
方法将数据存放到Intent
中,而接收方在处理数据时没有正确取出来。也有可能是Intent
中并没有存放所需要的数据。
- 在使用
intent.getStringExtra()
之前没有使用intent.hasExtra()
检查是否存在所需的值。
在使用getStringExtra()
方法之前,应该先通过hasExtra()
方法检查是否存在所需的值。没有检查是否存在这个值时,就可能会出现返回null
的情况。
- 使用键值不正确
在从Intent
中取出数据时,需要用到getStringExtra()
方法的参数键值(key
),而有可能使用了错误的键值。需要确保键值正确,才能从Intent
中正确取出所需的数据。
- 数据类型不匹配
在存放数据时,使用了一个错误的数据类型。当使用getStringExtra()
方法去取出时,就会出现返回null
的情况。需要检查所存放的数据的类型是否与要取出的类型一致。
3.2.2 Intent 对象被重用
多次使用同一个PendingIntent
发送广播时,可能会出现Intent
对象被重用的情况,导致获取到的数据不正确。
要解决这个问题,可以在创建PendingIntent时,使用PendingIntent.FLAG_UPDATE_CURRENT
标志来更新当前的Intent
,确保每次发送广播时都是使用新的Intent
对象。示例如下:
// 创建Intent对象
Intent intent = new Intent(context, MyReceiver.class);
intent.putExtra("data", "hello world");
// 创建PendingIntent对象,并同时指定FLAG\_UPDATE\_CURRENT和FLAG\_IMMUTABLE标志
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG\_UPDATE\_CURRENT | PendingIntent.FLAG\_IMMUTABLE);
// 发送广播
pendingIntent.send();
重点是:PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE
3.3 从当前APP跳转到另外一个目标APP的某个页面
由当前APP启动另外一个目标APP(非覆盖原来APP的方式)某个指定页面时,可以按照如下方案实施:
- 目标APP对应
Activity
中加入如下action
:
<activity
android:name="com.xxx.package.TargetXXActivity"
android:exported="true">
<intent-filter>
<action android:name="jp" /> <!--标志-->
<category android:name="android.intent.category.DEFAULT" /> <!--这是一个普通页面-->
</intent-filter>
</activity>
- 当前应用APP执行跳转到目标APP页面。
Intent intent = new Intent("jp"); // 标志(要和目标APP的清单文件中的标志一样)
startActivity(intent);
注⚠️:Intent 跳转时须捕获一下异常,防止目标对象不存在引起崩溃。
四、拓展阅读
算法
-
冒泡排序
-
选择排序
-
快速排序
-
二叉树查找: 最大值、最小值、固定值
-
二叉树遍历
-
二叉树的最大深度
-
给予链表中的任一节点,把它删除掉
-
链表倒叙
-
如何判断一个单链表有环
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
-
二叉树遍历
-
二叉树的最大深度
-
给予链表中的任一节点,把它删除掉
-
链表倒叙
-
如何判断一个单链表有环
[外链图片转存中…(img-QC2xVV3W-1715418564308)]
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!