美文网首页
通过Web启动本地App并利用Schema响应事务

通过Web启动本地App并利用Schema响应事务

作者: 胖头是真的胖 | 来源:发表于2017-12-22 16:19 被阅读0次

    首页明确需求:

        通过App分享出去的视频页面中有照做按钮,点击照做按钮之后如果本地安装了App则响应事件,启动App并过去视频Json然后进入选择本地素材的界面
        分享出的界面如下:
    
    image.png

    遇到的主要问题是:
    本地如何响应分享出去界面的点击事件
    如何解决:
    1.打开AndroidManifest.xml
    2.在想响应的界面下加入

     <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="xxx" />
     </intent-filter>
    

    <activity
                android:name=".ui.main.activity.SplashActivity"
                android:screenOrientation="portrait"
                android:theme="@style/SplashAppTheme">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </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="xxx" />
                </intent-filter>
            </activity>
    

    3.在SplashActivity中加入

    try {
                Uri uri = getIntent().getData();
                if (uri != null) {
                    String host = uri.getHost();
                    String dataString = getIntent().getDataString();
                    filmId = uri.getQueryParameter("filmId");
                    action = uri.getQueryParameter("action");
                    if ("play".equals(action)) {
                        //进入详情界面
                        ······
                    } else if ("simulate".equals(action)) {
                        //进入照做界面
                        ······
                    }
                } else {
                    //正常操作
                     ······
                }
            } catch (Exception e){
    
            }
    

    在这个界面你已经得到你想要的东西了,App已经成功的被唤醒
    但是我在这里遇到一个Bug到现在都没有解决掉
    这个bug是这样的:
    当我点击照做按钮成功唤醒App后,home
    回到分享出去的界面,再次点击照做按钮这时,没有走SplashActivity,而是直接启动了App 相当于直接的界面OnResume了,这就很尴尬,我不能再次走我SplashActivity的代码了。
    如果有高手知道这个bug怎么解决,写在评论里,我不胜感激!~

    ps:
    之前在为了解决项目release打包后,进入任意界面Home,再次点击app重新启动的问题
    在SplashActivity的OnCreate中加了如下代码

    // 避免从桌面启动程序后,会重新实例化入口类的activity
    if (!this.isTaskRoot()) {
        Intent intent = getIntent();
        if (intent != null) {
            String action = intent.getAction();
            if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {
                finish();
                return;
            }
        }
    }
    

    这会不会是导致问题的关键所在的,不说我了我去试试~

    相关文章

      网友评论

          本文标题:通过Web启动本地App并利用Schema响应事务

          本文链接:https://www.haomeiwen.com/subject/ylcxgxtx.html