android - 如何通过点击外部链接打开特定 ID 的特定 Activity

标签 android android-intent intentfilter

我在我的应用程序中添加了应用程序链接助手以从外部链接打开特定 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/

相关文章:

android - Instrumentation.Activity Monitor 可以查找任何正在启动的 Activity 吗?

c# - 将字符串从 Activity 传递到 DialogFragment

java - 为什么android.database.DatabaseUtils不会抛出SQLException等异常?

android - AspectJ 为 onCreate() 方法添加切入点执行

java - Android 调用 Intent 权限

android - 无法接收 UsbManager.ACTION_USB_DEVICE_ATTACHED/UsbManager.ACTION_USB_DEVICE_DETACHED 的广播 Intent

android - 清除 android 下载列表

android - ionic 调用 Intent 不起作用

android - 如果多个应用程序包含相同的 Service 类作为外部依赖项,则将使用 AIDL 返回哪个服务

Android:接收电子邮件附件的 Intent