2

嗨,我试图让我的 android 应用程序能够打开在 twitter 上发布的某些类型的链接(Twitter 卡)。我面临的问题是,如果在 twitter 上发布的链接是http://example.com,并且当 android manifest 中未指定参数 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);
    }
}    

}

4

0 回答 0