缺少浏览器应用程序导致XML action.VIEW意图崩溃

时间:2016-06-24 09:52:05

标签: android

给出以下首选项标头XML:

<input type="button" class="post" value="test"/>


 <script type="text/javascript">
            jQuery(document).ready(function($){
                $(".post").on("click",function(){
                    $.ajax({
                        url: "test.php",
                        type: "POST",
                        success: function(response){
                              //do action  
                        },
                        error: function(){
                              // do action
                        }
                    });
                });
            });
        </script>

缓解此错误的最佳方法是什么:

<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >

    <header
        android:icon="@drawable/ic_public_white_36dp"
        android:title="@string/menu_website" >
        <intent
            android:action="android.intent.action.VIEW"
            android:data="http://www.example.com" />
    </header>

</preference-headers>

问题是如果用户设备没有安装浏览器,它们将因该错误而崩溃。

此外,亚马逊电视设备也将因各种无浏览器异常而崩溃(因为他们没有浏览器)。

通常,您可以检查此Intent是否存在接收器,或者只是捕获异常。使用XML更加困难。阻止此操作的唯一方法是检查Fatal Exception: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=http://www.example.com } 中的设备,以便为“坏”设备删除此标头?

2 个答案:

答案 0 :(得分:0)

我目前对这种情况的回答。希望有一个更通用的解决方案。

@Override
public void onBuildHeaders(List<Header> target) {
    loadHeadersFromResource(R.xml.preference_headers, target);

    if(Utils.isAmazonTV() || !Utils.canHandleWebsite(this)) {
        Iterator<Header> it = target.iterator();
        while(it.hasNext()) {
            Header header = it.next();
            if(header.id == R.id.preference_website) {
                it.remove();
            }
        }
    }
}

答案 1 :(得分:0)

根据你自己的回答,我选择做一些稍微改进的事情。

 <script>
    $(document).ready(function() 
    {
        $("body").on("click", ".has-feedback a", function() 
        {
            $('.has-feedback a').css('opacity',0.5);
            $(this).css('opacity',1);
        });
    });
    </script>

<div class="form-group has-feedback ng-scope">                      
 <a href="#"  class="btn btn- newbutton7"><strong style="text-align:center;font-size:17px;font-family: sans-serif;margin-left:-4px;">Annual Compensation</strong></a>
 <a href="#"  class="btn btn- newbutton8"><strong style="text-align:center;font-size:17px;font-family: sans-serif;">Monthly Payslips</strong></a>
 <a href="#"  class="btn btn- newbutton9"><strong style="text-align:center;font-size:17px;font-family: sans-serif;margin-left:-8px;">Investment</strong></a>
 </div>