Как открыть определенную активность для определенного идентификатора, нажав на внешнюю ссылку - PullRequest
0 голосов
/ 04 ноября 2018

Я добавил в свое приложение помощник по ссылкам на приложения, чтобы открывать определенные действия по внешней ссылке. Теперь у меня есть следующий код в моей 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 в намерении?

Примечание. У нас есть HomeScreen по умолчанию в приложении, в котором есть кнопка «Войти в FB». Так должен ли я записать этот код в HomeScreenActivity и передать намерение в DatadetailAcvity.java? Если да, то как мне сообщить DataDetailScreen для конкретных данных (если у меня есть идентификатор)?

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Без информации об ошибке, но если вы хотите передать данные через глубокое связывание, вы можете использовать параметры запроса. Предположим, URL-адрес https://www.example.com/example?param1=hello

Тогда

Intent intent = getIntent();
Uri data = intent.getData();
String param1 = data.getQueryParameter("param1");
0 голосов
/ 04 ноября 2018

manifests.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
        }
    }
}

Deeplink

scheme://host?pama_name=value&other_param_name=value

Пример:

 somescheme://page_details?detail_id=2

Facebook Пошаговое руководство

Обновление

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
        }
    }
}
...