我在我的应用程序中添加了应用程序链接助手以从外部链接打开特定 Activity 。现在我的 DataDetailActivity 中有以下代码。
Intent appLinkIntent = getIntent();
String appLinkAction = appLinkIntent.getAction();
Uri appLinkData = appLinkIntent.getData();
if(appLinkData != null)
{
String dataId = appLinkData.getLastPathSegment();
Intent resultIntent = new Intent(this, DataDetailActivity.class);
startActivity(resultIntent);
}
我想打开特定的 DataDetailActivity。但这确实会引发错误。我必须在 Intent 中将 dataId 传递到哪里?
注意:我们在具有登录 FB 按钮的应用程序中有默认主屏幕。那么我是否必须在 HomeScreenActivity 中写下这段代码并将 Intent 传递给 DatadetailAcvity.java?如果是,那么我如何告诉 DataDetailScreen 特定数据(如果我有 ID)?
如有任何帮助,我们将不胜感激。
最佳答案
list .xml
<application
....
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".HomeScreenActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
<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="somescheme" /> <!--This line to define schema -->
</intent-filter>
</activity>
....
</application>
HomeScreenActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
checkDeepLink();
}
private void checkDeepLink(){
if (getIntent() != null && getIntent().getData() != null) {
Uri data = getIntent().getData();
String scheme = data.getScheme();
String host = data.getHost();
String param = data.getQuery();
Log.d("DeepLink","Schema : " + scheme);
Log.d("DeepLink","Host : " + host);
Log.d("DeepLink","param : " + host);
if (host.equals("page_details")){
Intent intent = new Intent(this,DatadetailAcvity.class);
intent.putExtra("detail_id",Long.valueOf(data.getQueryParameter("detail_id"))); // URL query values as string, you need to parse string to long.
startActivity(intent);
}else{
// ... other logic
}
}
}
深度链接
scheme://host?pama_name=value&other_param_name=value
示例:
somescheme://page_details?detail_id=2
Facebook Step-by-Step Guide
更新
DatadetailAcvity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data_detail);
if (getIntent() !=null) {
long detailId = getIntent().getLongExtra("detail_id",-1);
if (detailId != -1){
// do your stuff and displayed page by id
}
}
}
关于android - 如何通过点击外部链接打开特定 ID 的特定 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53135758/