android打开应用,安卓应用打开方式
Android打开应用市场
原本区分应用渠道跳转不同应用市场,但是在小米手机上出现了无响应的情况,最终放弃了跳转指定应用市场的方法,改为仅做跳转不做控制;
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、网站空间、营销软件、网站建设、林芝网站维护、网站推广。
原本的跳转区分:
2020-04-26
Android中打开其他应用(或者系统应用)Activity或者Fragment总结
最近在做项目适配工作,需要打开手机中设置页面进行设置。国内 rom 都是自己改过的,适配起来也是稍微的麻烦。同一个功能不同的手机品牌界面都不一样,纯粹的用 adb 命令以及 logcat 来查看每个手机对应的页面的 Activity 或者 Fragment 以及包名。简单的记录一下过程。
在控制台中输入一下命令,可以查看当前页面显示Activity的全部信息
拿小米手机 (Android 6.0, MIUI 9.2 )的锁屏和密码这个功能页面来说。在控制台输入命令之后,可以看到一长串的信息。
可以看到当前的 Activity 的包名 com.android.settings 以及 Activity 的名称 SubSettings 。这样不久可以通过隐士调用打开页面了么? 直接上手操作一波。
结果很尴尬的,打开的是空白页,这又是怎么回事?而且跳转了几个页面在同时输入上边命令,也是显示这个页面 SubSettings 。这样就开始疑惑了,想到这应该是小米在上边改动,通过Fragment来实现相关的功能了。先看看原生的系统源码。(网上源码地址: )。打开源码,发现没有实现什么具体的东西。
但是看到源码中 protected boolean isValidFragment(String fragmentName) 确定了这其实就是一个 Fragment 的容器。好那再接着看 dumpsys 命令的返回信息。
看到 Activie Fargment MiuiSecuritySettings 。 但是又不知道包名,因为手机厂商各种改,不一定包名就是 settings 。就有通过 Android Studio Logcat 找到了解决方案。链接手机的时候 Logcat 打印了各种系统的 log 。 Ctrl + F 直接搜索一下 MiuiSecuritySettings 。果然找到了
最后,通过如下的方法,启动小米系统的锁屏和密码设置界面
其他的页面,应该也是大同小异的处理思路,只能一个个手机来实际适配了,并没有找到一个很好的解决办法,挨。
Android从浏览器中打开本地应用
开发中遇到的一些问题特此记录:
1、应用场景一 在浏览器中要求直接打开到安装的应用中
需要在该应用的启动Activity 清单文件中进行配置
Intent-filter
action android:name="android.intent.action.VIEW"/
category android:name="android.intent.category.DEFAULT"/
category android:name="android.intent.category.BROWSABLE"/
data
android:host="com.baidu.test"
android:scheme="text"/
/Intent-filter
此处对应的data数据 跟服务器人员进行交互的时候为:text://com.baidu.test
2、应用场景二 在浏览器中进行打开 并且要求打开指定的具体的页面
首先得在清单文件中进行上面一样的配置 接着和从其他跳转的activity中获取的一样 ,通过intent来进行数据的获取
if(intent !=null) {
Uri uri = intent.getData();
if(uri !=null) {
String host = uri.getHost();
LogUtil.d(TAG,host);
String data = uri.getQueryParameter("code");
try{
jumpData= URLDecoder.decode(data,"UTF-8");
LogUtil.d(TAG,jumpData);
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
这样获取到的数据就是需要的数据 所要跳转的具体信息具体跳转类型都会获取到,然后在跟以前一样进行跳转就可以了。
Android应用程序启动流程总结
AMS主要功能:
AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作。还负责启动或杀死应用程序的进程。
WMS主要功能:
为所有窗口分配Surface。
管理Surface的显示顺序、尺寸、位置。
管理窗口动画。
输入系统相关:WMS是派发系统按键和触摸消息的最佳人选,当接收到一个触摸事件,它需要寻找一个最合适的窗口来处理消息。
PWS主要功能:
PMS 用来管理跟踪所有应用APK,包括安装,卸载,解析,控制权限等。
SystemServer也是一个进程,包括AMS、PMS、WMS等等。
zygote意为“受精卵“。Android是基于Linux系统的,而在Linux中,所有的进程都是由init进程直接或者是间接fork出来的,zygote进程也不例外。
App进程是用户点击桌面icon时,通过Launcher进程请求SystemServer,再调用Zygote孵化的。
①点击启动一个App,Launcher进程采用Binder IPC向ActivityManagerService发起startActivity请求;
②ActivityManagerService接收到请求后,向zygote进程发送创建进程的请求;
③Zygote进程fork出新的子进程,即App进程;
④App进程通过Binder IPC向sytem_server进程发起绑定Application请求;
⑤system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求;
⑥App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;
⑦主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。
⑧到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。
备注:
Launcher,PMS,Zygote,App进程是三个独立的进程,相互通信就需要使用进程间通信机制。与Zygote通信是使用的socket通信,Launcher,PMS,App进程间使用的是Binder机制。
分享文章:android打开应用,安卓应用打开方式
网页URL:http://myzitong.com/article/dsdodjj.html