方式一:包名+特定Activity路径拉起(这里进去就是想到达的指定Activity)
方式二:采用包名拉起(这里就是进去启动页)
具体logcat错误是:
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cmp=com.example.mykotlindemo/.main.MainActivity (has extras) } from ProcessRecord{c4e43b9 9825:com.kc.mvvmcomponent/u0a541} (pid=9825, uid=10541) not exported from uid 10563
原因是燃腔,没有设置另辩谨一个app可被其他组件启动,需要在要被启动的指定Activity中设置: android:exported="true"
表明当前 activity 能否被另外一个Application 的组件启动,true允许启动,false不允许。默认是携段基false。注意:该属性是四大组件都拥有的。
本文我们来学习Activity之间的跳转
主界面放一个Button,用于跳转,Second界面就放一个TextView
MainActivity.java
activity_main.xml
SecondActivity.java
activity_second.xml
AndroidMainfest.xml
界面跳转主要是通过构建Intent,然后调用Activity的startActivity方法去启动
Intent接收两个参数,一个是Context,一个是需要跳转的Activity(Context有三种,分别是Application、Activity、Service,具体区别之后会发专门的文章来分析)
隐式启动也需要构建Intent,不过Intent传入的参数是一串字符,这串字符是由你自己定义的
我们饥空先来修改AndroidManifest.xml
action自定义一个字腊扰符串,按自己喜欢的风格命名就行了
categroy也是由自己定义,但这里我们就用一个默认的字符串
接着修改MainActivity.java
注意这个Intent传入的参数烂局瞎要和之前定义的action一样
如果在AndroidManifest.xml中加了自己的category,那么就要这样写
我们在启动时要匹配所有的category才能启动
这时,你会发现我没有将android.intent.category.DEFAULT加进去
这是因为startActivity的时候,系统会自动自动帮我们加上
这个就是隐式启动。
android中intent实现两个不同应用Activity跳转,可以用以下的方法:开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。一般我们知道了另一个应用的包名和MainActivit y的名字之后便可以直接通过如下代码来启动:[java] view plaincopy冲岩Intent intent = new Intent(Intent.ACTION_MAIN)intent.addCategory(Intent.CATEGORY_LAUNCHER)ComponentName cn = new ComponentName(packageName, className)intent.setComponent(cn)startActivity(intent)但是更多的时候,我们一般都不知道目标应用程序的启动Activity的类名,而只知道包名,接下来就需要这么做了,我封装成了一个方法,如辩缓下所示:[java] view plaincopyprivate void doStartApplicationWithPackageName(String packagename) {// 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等PackageInfo packageinfo = nulltry {packageinfo = getPackageManager().getPackageInfo(packagename, 0)} catch (NameNotFoundException e) {e.printStackTrace()}if (packageinfo == null) {return}// 创建一个类别为CATEGORY_LAUNCHER的该包名的IntentIntent resolveIntent = new Intent(Intent.ACTION_MAIN, null)resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER)resolveIntent.setPackage(packageinfo.packageName)// 通过getPackageManager()的queryIntentActivities方法遍历List<ResolveInfo>resolveinfoList = getPackageManager().queryIntentActivities(resolveIntent, 0)ResolveInfo resolveinfo = resolveinfoList.iterator().next()if (resolveinfo != null) {// packagename = 参数packnameString packageName = resolveinfo.activityInfo.packageName// 这个就是我们要找的携判模该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]String className = resolveinfo.activityInfo.name// LAUNCHER IntentIntent intent = new Intent(Intent.ACTION_MAIN)intent.addCategory(Intent.CATEGORY_LAUNCHER)// 设置ComponentName参数1:packagename参数2:MainActivity路径ComponentName cn = new ComponentName(packageName, className)intent.setComponent(cn)startActivity(intent)}}欢迎分享,转载请注明来源:内存溢出
评论列表(0条)