精华内容
下载资源
问答
  • 1. Android 从一个 APP 跳转到另一个 APP 主界面 Intent intent = new Intent(Intent.ACTION_MAIN); //前提:知道要跳转应用的包名、类名 ComponentName componentName = new ComponentName("...

    1. Android 从一个 APP 跳转到另一个 APP 主界面

            Intent intent = new Intent(Intent.ACTION_MAIN);
            //前提:知道要跳转应用的包名、类名
            ComponentName componentName = new ComponentName("com.example.hust_twj.secondapp", "com.example.hust_twj.secondapp.MainActivity");
            intent.setComponent(componentName);
            startActivity(intent);

    本 Demo 包括 2 个测试的 APP ,FirstApp 主界面有 2 个按钮,分别进入 SecondApp 的主界面和某指定的界面;而SecondApp 主界面仅有一个登陆的按钮,点击该按钮可以进入登陆界面。

    从 FirstApp 进入 SecondApp 的主界面跳转截图(代码如上):


    这里写图片描述

    2. Android 从一个 APP 跳转到另一个 APP 的某 activity

    (1) 把要跳转的目标 APP 的指定 activity 暴露出来
    在 AnroidManifest 文件中给 activity 节点设置 Android:exported="true",该属性表示当前 activity 能否被另外一个Application 的组件启动,true允许启动,false不允许。默认是false。注意:该属性是四大组件都拥有的。

          <activity
              android:name=".LoginActivity"
              android:exported="true">
          </activity>

    (2) 启动/跳转

            Intent intent = new Intent();
            intent.setClassName("com.example.hust_twj.secondapp", "com.example.hust_twj.secondapp.LoginActivity");
            startActivity(intent); 

    第一个参数是目标 APP 的包名,第二个参数是目标 APP 的 activity 的全称。如果目标 APP 的 activity 没有暴露入口,则会报权限禁止错误。

    从 FirstApp 进入SecondApp 的某指定界面(登陆界面):


    这里写图片描述

    3. 跳转时使用 Bundle 传递数据

    在 FirstApp 中使用 Bundle 传递数据:

      public void go2Main(View view){
            ComponentName componentName = new ComponentName("com.example.hust_twj.secondapp","com.example.hust_twj.secondapp.MainActivity");
            Intent intent = new Intent();
            Bundle bundle = new Bundle();
            bundle.putString("FIRST_APP_KEY", "你好 ,MainActivity");
            intent.putExtras(bundle);
            intent.setComponent(componentName);
            startActivity(intent);
        }
    
        public void go2Login(View view){
            Intent intent = new Intent();
            intent.setClassName("com.example.hust_twj.secondapp", "com.example.hust_twj.secondapp.LoginActivity");
            Bundle bundle = new Bundle();
            bundle.putString("FIRST_APP_KEY", "你好 ,LoginActivity");
            intent.putExtras(bundle);
            startActivity(intent);
        }

    在 SecondApp 中,假如 MainActivity 和 LoginActivity 都有 TextView 用于显示从 FirstApp 中传过来的数据(本 Demo 中没有 TextView ),那么在 MainActivity 和 LoginActivity 中接收数据如下:

            TextView mTextView = (TextView) findViewById(R.id.tv_main);
            Bundle bundle = this.getIntent().getExtras();
            if (bundle != null){ //防止直接启动MainActivity时空指针闪退
                String value = bundle.getString("FIRST_APP_KEY");
                mTextView.setText(value);
            }

    至此, APP 间的跳转及传递数据就结束啦~

    展开全文
  • 网页跳转回应用的实现原理。 就Android平台而言,URI主要分三个部分:scheme, authority and path。其中authority又分为host和port。格式如下:  scheme://host:port/path  举个实际的例子:  content://...

    网页跳转回应用的实现原理。

    就Android平台而言,URI主要分三个部分:scheme, authority and path。其中authority又分为host和port。格式如下: 
    scheme://host:port/path 
    举个实际的例子: 
    content://com.example.project:200/folder/subfolder/etc 
    \---------/  \---------------------------/ \---/ \--------------------------/ 
    scheme                 host               port        path 
                    \--------------------------------/ 
                              authority    

    现在大家应该知道data flag中那些属性的含义了吧,看下data flag 
    <data android:host="string" 
          android:mimeType="string" 
          android:path="string" 
          android:pathPattern="string" 
          android:pathPrefix="string" 
          android:port="string" 
          android:scheme="string" /> 

    以下是测试示例的实现步骤:

    1. 新建一个工程A,并实现一个Activity,用来接收外部的跳转。代码如下:

    [java]  view plain copy
    1. public class JumpActivity extends Activity{  
    2.   
    3.   
    4.     @Override  
    5.     protected void onCreate(Bundle savedInstanceState) {  
    6.         // TODO Auto-generated method stub  
    7.         super.onCreate(savedInstanceState);  
    8.         Intent intent = getIntent();  
    9.           
    10.         String data = intent.getDataString();  
    11.         System.out.println(data);  
    12.     }  
    13.       
    14. }  

    在这个Activity里,我们可以通过getIntent(),来获取外部跳转传过来的信息。

    2.  修改ManiFest文件,设置Activity的接收Action的属性,代码如下:

    [java]  view plain copy
    1. <activity android:name=".JumpActivity" >  
    2.     <intent-filter>  
    3.         <action android:name="android.intent.action.VIEW" />  
    4.   
    5.   
    6.         <category android:name="android.intent.category.DEFAULT" />  
    7.         <category android:name="android.intent.category.BROWSABLE" />  
    8.   
    9.   
    10.         <data  
    11.             android:host="data"  
    12.             android:scheme="sharetest" />  
    13.     </intent-filter>  
    14. </activity>  

    此处注意:

    1. <data  
    2.             android:host="data"  
    3.             android:scheme="sharetest" />

    不能和定义android.intent.category.LAUNCHER的intent-filter放在一起,要分开放如下:

          <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
                <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:scheme="<span style="color: rgb(0, 0, 255); font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px; background-color: rgb(248, 248, 248);">sharetest</span>" android:host="<span style="color: rgb(0, 0, 255); font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 14px; line-height: 18px;">data</span>"/>
                </intent-filter>
    这样就可以在android手机浏览器直接输入类似于 "sharetest://data/XXX"的链接来跳转app了

    如上所示,在data里设置了 scheme和host,则该Activity可以接收和处理类似于 "sharetest://data/XXX"的链接。

    3. 接下来我们可以写一个测试工程B,看看工程A中的JumpActivity是否可以接收和处理类似于 "sharetest://data/XXX"的链接。因此,新建一个工程B,工程里只有一个WebView,用来打开一个本地的网页。由于WebView在接收到自己不能处理的Uri时,会自动的调用发送Intent来调用能够处理该Uri的应用。

    以下是网页的代码:

    [html]  view plain copy
    1. <!DOCTYPE html>  
    2. <html>  
    3. <body>  
    4. <iframe src="sharetest://data/123" style="display:none"></iframe>  
    5. </body>  
    6. </html>  
    将该网页放到Assets目录下,在代码里调用Webview加载该Html文件,代码如下:

    [java]  view plain copy
    1. public void loadHtml()  
    2. {  
    3.     WebView webview = new WebView(this);   
    4.     WebSettings wSet = webview.getSettings();   
    5.     wSet.setJavaScriptEnabled(true);  
    6.     webview.loadUrl("file:///android_asset/a.html");    
    7.     setContentView(webview);  
    8. }  

    4. 将手机装上工程A和工程B。打开工程A,可以发现:工程B的JumpActivity会自动被打开。如下图所示:在Intent中可以去到网页里发出的链接:sharetest://data/123。

    因此,我们就可以在JumpActivity里处理接收到的消息了。


    通过以上的4步,相信大家都了解如何让应用接收和处理某种Uri消息。因此,只要我们

    1. 在ManiFest里为Activity申明接收并处理某种Uri

    2. 在页面中添加以下代码:其中,l为符合Activity处理规则的Uri地址。

    [java]  view plain copy
    1. <iframe src="l" style="display:none"></iframe>  
    就可以让已安装该应用的用户在打开该网页的时候,自动的跳转到应用内部。

    点击微信和QQ分享跳转到程序内部的原理与此一致。

    展开全文
  • 在需要跳转的目标安卓App的activity中添加对外的schema,示例代码如下:android:label="@7F070043"android:name="com.huawei.phoneservice.HelpCenterActivity"android:exported="true"android:excl...

    最新遇到一个需要从快应用跳转到Android App的需求,以下记录下实现的方式。

    在需要跳转的目标安卓App的activity中添加对外的schema,示例代码如下:

    android:label="@7F070043"

    android:name="com.huawei.phoneservice.HelpCenterActivity"

    android:exported="true"

    android:excludeFromRecents="true"

    android:launchMode="2"

    android:configChanges="0x40002D84">

    在快应用中通过system.router.push接口调用跳转,即router.push接口传入上步配置的schema:

    router.push({uri:"hwphoneservice://externalapp/service"})

    快应用push接口使用方法详见API文档:

    原作者:Mayism

    展开全文
  • oncreate中()调用 private void hook() { try { // 还原 gDefault() 成员 Class activityManagerNative = Class.forName("android.app.ActivityManagerNative"); // 获取到成员变量 Field gDefault = ...

    参考自:

    https://blog.csdn.net/sunyao19940708/article/details/80021252?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

    直接加到application中,oncreate中()调用

    private void hook() {
            try {
                // 还原 gDefault() 成员
                Class activityManagerNative = Class.forName("android.app.ActivityManagerNative");
                // 获取到成员变量
                Field gDefault = activityManagerNative.getDeclaredField("gDefault");
                gDefault.setAccessible(true);
                // 获取类成员变量,直接传空,因为是静态变量,所以获取到的是系统值,
                // 得到Singleton 静态类,
                Object defaultValue = gDefault.get(null);
                //mInstance对象
                Class<?> singletonClass=Class.forName("android.util.Singleton");
                Field mInstance = singletonClass.getDeclaredField("mInstance");
                mInstance.setAccessible(true);
                // 获取到成员变量
                Object iActivityManagerObject = mInstance.get(defaultValue);
    
                // 实现该接口
                Class iActivityManagerIntercept = Class.forName("android.app.IActivityManager");
                StartActivity startActivity = new StartActivity(iActivityManagerObject);
                /**
                 * ClassLoader loader  当前的类加载器
                 * Class<?>[] interfaces  返回的类将会实现的接口
                 * InvocationHandler h 实现了InvocationHandler 接口的代理类,以便实现系统分发出来的方法,实现拦截操作
                 */
                Object oldIActivityManager = Proxy.newProxyInstance(
                        Thread.currentThread().getContextClassLoader(),
                        new Class[]{iActivityManagerIntercept},
                        startActivity
                );
                // 将我们获取到的值设置进去
                mInstance.set(defaultValue, oldIActivityManager);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    

    新建startActyivity类

    package com.mouxiugas.xian;
    
    import android.content.Intent;
    import android.util.Log;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    
    /**
     * @user XUNUA
     * @email xunua@outlook.com
     * @creat time 2020/7/22 10:00
     */
    class StartActivity implements InvocationHandler {
        private Object iActivityManager;
    
        public StartActivity(Object iActivityManager) {
            this.iActivityManager = iActivityManager;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            if ("startActivity".equals(method.getName())) {
                final Intent intent = (Intent) args[2];
                if (intent != null) {
                    if ("android.intent.action.VIEW".equals(intent.getAction())){
                        final String s = intent.getData().toString();
                        Log.d("Ellison", "---------startActivity----------"+ s);
                        //这里判断s是不是我们要拦截跳转的url
                        if (s.equals("https://hydrozoa.felisworks.com/")|| s.equals("http://silversecond.com/")|| s.equals("https://hydrozoa.felisworks.com/")){
                        //是的话,那么就使这两个参数 iActivityManager   args为空  这样就不会执行跳转
                        //也可以去掉if语句,那样的话就是拦截所有的打开浏览器请求
                            iActivityManager=null;args=null;
                        }
                    }
                }
            }
            return method.invoke(iActivityManager, args);
        }
    }
    
    
    展开全文
  • 近日在Android 8.0手机上出现了应用无法更新的情况,具体提现在:不跳转系统安装应用界面。主要是华为系列手机,比如华为Mate9,P10,荣耀10… 搜索后得知,是由于8.0以后Android的未知来源应用安装默认是禁止的,...
  • 首先获取包名: ...1.以微信为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\Android\weixin531android460.apk 2.运行后的结果如下(仅截取部分): package: name='com.tencent.mm' version
  • 之前公司有一个新的APP项目上线,让我们在项目首页做个二维码,然后用户用手机扫一扫就能下载了。但是微信的扫一扫之后下载不了。  上网查了一下,微信自带的内置浏览器屏蔽了下载功能,所以才出现用微信扫一扫不...
  • 在h5制作的app中,设计路由跳转跳转翻页动画是最必要的。其中有很多需要注意的问题,分享下小编的处理方式~ 一、翻页效果 首先,跳转翻页动画的监控,因为小编是用vue学的,所以在app.vue中监控路由变化,设置路由...
  • app需要进入淘宝优惠卷界面(H5)领卷购买商品,但这个H5界面会自动唤起手机淘宝经检查scheme为tbopen://,我想问下怎样禁止唤起手淘?
  • 随着小程序的日渐火热,许多app都做了相应的小程序端,与之而来的两端交互是必不可少的,前几天我们的分享到微信的样式也要求改成了小程序卡片样式的了。其实微信的官方文档还算比较详细,我这就结合自己踩的坑给...
  • 然后换用https://github.com/delight-im/Android-AdvancedWebView,播放是可以了,但是新的问题又来了,如果打开的是专辑页面,页面内容会短暂出现,然后说“找不到网页。orpheus://albun?1802412处的网页可能暂时不...
  • 微信 小程序、APP跳转总结

    千次阅读 2019-01-15 18:12:11
    跳转:3跳转:2跳转:1小程序APP 跳转:1 结论:可行,但必须为自己的APP或者对方同意你跳转他的APP才行。 限制: 公众平台绑定小程序 https://open.weixin.qq.com 相同主体:上限5个,绑定次数不限,资源有限。 未...
  • 微信浏览器禁止app下载链接怎么办

    千次阅读 2016-03-16 11:54:52
    微信浏览器禁止app下载链接怎么办 micromessenger
  • 最近,在使用QQ和微信等SDK来实现分享网页的时候,发现,SDK已经为页面跳转回应用提供了...就Android平台而言,URI主要分三个部分:scheme, authority and path。其中authority又分为host和port。格式如下:  sche
  • APP 之间跳转实现

    千次阅读 2018-03-27 10:43:29
    在谈App内部的路由之前,先来谈谈在iOS系统间,不同App之间是怎么实现跳转的。 1. URL Scheme方式 iOS系统是默认支持URL Scheme的,具体见官方文档。 比如说,在iPhone的Safari浏览器上面输入如下的命令,会自动...
  • 微信内无法直接下载app或者其他文件,因为微信会拦截含下载文件的链接,那么此时就需要用到微信跳转功能。很多朋友问我怎么解决微信内点击链接或扫描二维码可以直接跳出微信在外部浏览器打开网页链接,其实这并不难...
  • 网上对于安卓DeepLink方式跳转传递参数的例子较少,说的也不客观,实践之后发现还是有一些坑。其实为什么要用DeepLink方式跳转,有些是因为引流的原因,他们希望通过网页就能直接跳转App的界面。还有其实就是某些...
  • 最近,在使用QQ和微信等SDK来实现分享网页的时候,发现,SDK已经为页面跳转回应用提供了基本的数据支持。我们只需在应用里和被分享的网页进行简单的设置,即可实现此功能。
  • 文章转自:http://blog.csdn.net/hust_twj/article/details/734774541,Android从一个APP跳转到另一个APP主界面Intent intent = new Intent(Intent.ACTION_MAIN); //知道要跳转应用的包名、类名 ComponentName ...
  • H5跳转APP指定页面

    万次阅读 2017-12-22 11:51:01
    比如我的设为iOSTencentTest,在浏览器中输入地址iOSTencentTest://即可跳转到我的app 2.跳转到指定页面 在使用iOSTencentTest://打开app会调用AppDelegate的代理方法 -(BOOL)applicat...
  • H5页面封装APP跳转链接点击返回就会关闭整个APP,怎么破?
  • uniapp的 安卓app 定位权限被拒绝后,询问是否开启授权并跳转到手机设置页面 询问是否授权定位->拒绝定位授权->再次访问提示是否打开授权->跳转至手机设置页面 uni.getLocation({ type: 'gcj02', success...
  • mounted () { if (window.history && window.history.pushState) { history.push...// 这里写上你要跳转的页面 } } destroyed () { window.removeEventListener('popstate', this.goBack, false) } 非常简单 亲测有效
  • 使用步骤一,首先要给你要打开的应用中的activity设置过滤器(在清单文件里设置)以JumpActivity为例如下面的: 中就是所需过滤器 二,在JumpActivity中做打开后的处理,用来接收外部的跳转public class JumpActivity ...
  • 之前公司有一个新的APP项目上线,让我们在项目首页做个二维码,然后用户用手机扫一扫就能下载了。但是微信的扫一扫之后下载不了。  上网查了一下,微信自带的内置浏览器屏蔽了下载功能,所以才出现用微信扫一扫不...
  • 替换腾讯的X5webview,可以完美拦截跳转。注:有做电商的同学,淘宝之类的,不要用这个,去集成阿里百川,因为授权免登录腾讯的也会给你拦截掉
  • 我比较喜欢使用Webview来做Android应用,毕竟做网站多年,HTML/JS/CSS方面比较拿手,对于一些小应用,用HTML来做APP再适合不过了。默认情况下,在Webview html代码里放有链接,点击后会弹出系统默认的浏览器打开,有...
  • 过扫描二维码下载APP已成为一个非常方便的方式,微信也成为扫描二维码重要的工具,但是扫描后微信浏览器会对APK和appStore的链接进行屏蔽,导致用户无法正常下载。 提供解决方案:1.使用腾讯应用宝;2.提示用户使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,750
精华内容 2,300
关键字:

安卓禁止app跳转