フロントエンドとバックエンドに分かれたアプリがあります。(MVCに少し似ています)。私のアプリは、「testscheme」のような特別な URL スキームを使用しています。ユーザーがtestscheme://リンクをクリックすると、バックエンドに通知したいので、バックエンドは内部状態を設定し、一致するアクティビティを起動する必要があります。
ブラウザーからのリンクをインターセプトして Android アプリを開く
方法と
、Androidに独自の URI スキームを実装する方法は、私の問題の一部をカバーしていますが、完全ではありません。<intent-filter>
どちらも、<activity>
I want to react to the scheme にa を追加するように指示しています。しかし、この時点では、どのアクティビティを開始するのかわかりません。これが一意になるように URL をフォーマットしたとしても、アクティビティを開始する前に内部状態を保存したいと考えています。
私の最初の試みは、まったく同じで broadcastReciever を使用していました<intent-filter>
が、これは機能しませんでした。
これは私のマニフェストの関連部分です:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testurls"
android:versionCode="2"
android:versionName="0.1" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<receiver android:name=".backend.BackendController" >
<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="testurls" />
</intent-filter>
</receiver>
</application>
</manifest>
そして、これは私の受信機の一部です
package com.example.testurls.backend;
public class BackendController extends BroadcastReceiver implements BackendControllerInterface, GameStateLoadedListener, UrlsLoadedListener {
@Override
public void onReceive(Context context, Intent intent) {
Uri data = intent.getData();
if(data.getHost()=="maillink"){
this.proceedlevel();
this.frontend.MailReturned();
}else if(data.getHost()=="level1finished"){
this.proceedlevel();
this.frontend.level1Finished();
}
}
}