【问题标题】:How to open specific activity for particular id by clicking from external link如何通过单击外部链接打开特定 ID 的特定活动
【发布时间】:2018-11-03 21:40:30
【问题描述】:

我在我的应用中添加了应用链接助手,以从外部链接打开特定活动。现在我的 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。但这确实会引发错误。在意图中我必须在哪里传递 dataId?

注意:我们在具有登录到 FB 按钮的应用程序中有默认主屏幕。那么我是否必须在 HomeScreenActivity 中写下这段代码并将意图传递给 DatadetailAcvity.java?如果是,那么我如何告诉 DataDetailScreen 特定数据(如果我有 id)?

任何帮助将不胜感激。

【问题讨论】:

    标签: android android-intent intentfilter


    【解决方案1】:

    ma​​nifests.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
    

    脸书 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
            }
        }
    }
    

    【讨论】:

    • 我必须在 DataDetailActivity 中做任何事情吗?
    • 这实际上是应用程序具有多个位置详细信息并单击它会显示该位置的详细信息的情况(此处为 DataDetailActivity)。所以我想显示那个特定位置的 DataDetailActivity (当我们从链接获取 id 时)。那么我怎样才能在 DataDetailActivity 中获得 iit。
    • API 文档之一说 /api/loc/list/:ID 获得单次游览。想知道这在这种情况下是否有帮助,或者不只是分享它。
    • 查看我的更新以从DataDetailActivity获取detail_id
    • 你需要把你的逻辑放入onMapReadyCheck maps doc
    【解决方案2】:

    没有错误信息,但如果你想通过深度链接传递数据,你可以使用查询参数。 假设 url 是https://www.example.com/example?param1=hello

    然后

    Intent intent = getIntent();
    Uri data = intent.getData();
    String param1 = data.getQueryParameter("param1");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      相关资源
      最近更新 更多