嗨,我试图让我的 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);
}
}
}