Twitter卡未检测到Android上的网址

时间:2014-10-20 05:23:53

标签: android android-intent twitter intentfilter twitter-card

您好我试图让我的Android应用程序能够打开Twitter(Twitter卡)上发布的某些类型的链接。我面临的问题是如果Twitter上发布的链接是http://example.com,并且在android清单中没有指定参数pathprefix,那么卡上的按钮会显示"在应用程序中打开"文本,当您单击链接时,它打开一个对话框,其中我的应用程序作为选择器之一,当清单中未指定参数pathprefix,但如果链接为http://example.com/pqr且pathprefix为/ pqr,则"在应用程序中打开"文本不显示,而是"在浏览器中打开"文本显示在按钮上,当我尝试在浏览器中打开链接时,将显示包含我的应用程序的选择器对话框。所以,我的应用程序能够在从浏览器打开时打开应用程序中的链接,但不能直接从推特卡打开。我无法检测代码中的任何缺陷并需要帮助。我在Android清单和Twittercardcontent java文件中编写了以下代码:

<activity
        android:name="com.package.TwitterCardContent"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:label="@string/twittercardtitle"
        android:screenOrientation="portrait" >
        <intent-filter android:label="@string/twittercardtitle">
            <action android:name="android.intent.action.VIEW"></action>
            <category android:name="android.intent.category.DEFAULT"></category>
            <category android:name="android.intent.category.BROWSABLE"></category>
            <data android:scheme="http" android:host="example.com" android:pathPrefix="/pqr" ></data>
        </intent-filter>
</activity>

的活动:

public class TwitterCardContent extends SherlockActivity{
private WebView webview;
ActionBar actionBar;
ProgressBar aboutWebProg;

@Override
protected void onCreate(Bundle savedInstanceState) {
    Uri uri = getIntent().getData();
    URL url= null;
    try {
        Toast.makeText(this, uri.getScheme()+ " " +uri.getHost()+ " " +uri.getPath(), Toast.LENGTH_SHORT).show();

        url = new URL(uri.getScheme(), uri.getHost(), uri.getPath());
        Toast.makeText(this, url.toString(), Toast.LENGTH_SHORT).show();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }

    setContentView(R.layout.twittercard);
    webview = (WebView) findViewById(R.id.webviewdata);

    super.onCreate(savedInstanceState);

    actionBar=getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);

    aboutWebProg=(ProgressBar)findViewById(R.id.aboutWebProg);
    webview.setWebViewClient(new MyWebViewClient());

    /*
    webview.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            return true;
        }
    });
    */
    //webview.setLongClickable(false);
    if (url != null)
        webview.loadUrl(url.toString());
}

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onLoadResource(WebView  view, String  url){

    }

    @Override
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub
        aboutWebProg.setVisibility(View.GONE);
        super.onPageFinished(view, url);
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        aboutWebProg.setVisibility(View.VISIBLE);
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public void onReceivedError(WebView view, int errorCode,
            String description, String failingUrl) {
        // TODO Auto-generated method stub
        aboutWebProg.setVisibility(View.GONE);
        super.onReceivedError(view, errorCode, description, failingUrl);
    }
}    

}

0 个答案:

没有答案