私は2つのアプリAとBに取り組んでいます。
アプリBには次のようなディープリンクがあります:myApp://open/myAction?param=123
次のようになります。
<!-- Update myAction deep link -->
<intent-filter Android:label="@string/launcherName">
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.DEFAULT" />
<category Android:name="Android.intent.category.BROWSABLE />
<data
Android:Host="open/*"
Android:scheme="myApp" />
</intent-filter>
Adbを使用してアプリを起動すると、完全に機能します。
ユーザーがアクティビティAのボタンをクリックしたときに、アプリケーションBを起動しようとしています。
ボタンがクリックされたときにこれを試しました(次の場所にあります: GoodleDeveloper )(OnClickListener
)
// Build the intent
Uri myAction = Uri.parse(mEditText.getText().ToString()); // is something like: `myApp://open/myAction?param=1AD231XAs`
Intent mapIntent = new Intent(Intent.ACTION_VIEW, myAction);
// Verify it resolves
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
boolean isIntentSafe = activities.size() > 0;
// Start an activity if it's safe
if (isIntentSafe) {
startActivity(mapIntent);
}
そして明らかに機能していませんが、なぜそれが機能していないのかわかりません。多分私は何かを逃した。
ディープリンクを起動する前に、PackageManagerからインテントを作成し、アクション(ACTION_VIEW)とデータ(myAction)を設定してみてください。
Uri myAction = Uri.parse(mEditText.getText().toString());
PackageManager packageManager = getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage(<app_destination_package>);
if (intent != null) {
intent.setAction(Intent.ACTION_VIEW);
intent.setData(myAction);
startActivity(intent);
}
上記の回答が正解としてマークされた理由はわかりません。ディープリンクではなく、LAUNCHERとして定義された画面でのみアプリを開くことができるからです。
これに従って、アプリXXXから任意の画面を開くことができます!
private void startAppXXXfromThisFuckinApp() {
// pass the uri (scheme & screen path) of a screen defined from app XXX that you want to open (e.g HomeActivity)
Uri uri = Uri.parse("xxx://screen/home");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, uri);
//Verify if app XXX has this screen path
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities =
packageManager.queryIntentActivities(mapIntent, 0);
boolean isIntentSafe = activities.size() > 0;
//Start HomeActivity of app XXX because it's existed
if (isIntentSafe) {
startActivity(mapIntent);
}
}
そして明らかに、アプリXXXではAndroidManifest.xmlは次のようになっている必要があります。
<activity
Android:name=".HomeActivity"
<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:Host="screen/home"
Android:scheme="xxx" />
</intent-filter>
ご列席の皆様、アプリXXXからHomeActivity画面が開きます。
このようにマニフェストを変更します
<data
Android:Host="open"
Android:pathPattern="/myAction?param=123"
Android:scheme=" myApp" />
最初のアクティビティでインテントを送信するには
Intent intent = new Intent (Intent.ActionView);
intent.setData (Uri.Parse (DEEP_LINK_URL));
そしてあなたの2番目の活動で
if(getIntent()!=null){
Intent deepLink = getIntent();
deepLink.getScheme();
deepLink.getData().getPath();
}