そのため、アプリに呼び出される URL を取得しようとしていますが、開いた後は、null
私が何をしても問題ないようです。
私のマニフェストの関連部分は次のとおりです。
<activity android:name="myapp" android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<data android:scheme="myapp" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
そして、ここに私のJavaがあります:
@Override
public void onStart() {
super.onStart();
final Intent intent = getIntent();
Uri url = intent.getData();
Log.e("myLog", "Url = " + url);
}
ログには「Intent = null」が出力されており、エラーはありません。
私は Java 開発者ではないので、認識できない単純な問題が発生する可能性があります。これを PhoneGap アプリに渡しますが、PhoneGap アプリでsendJavascript
あることはこの問題とは関係がないようです。
編集:
<intent-filter>
私がログに記録するとき、私は最初のものしか得ていないようですintent
。ログは次のとおりです。
03-13 12:36:18.593: E/MyAppLog(13793): Intent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.wd.myapp/.myapp (has extras) }
解決:
PhoneGap アプリを開くために URL スキームを実装する方法について何十もの記事を投稿しましたが、どれも非常に堅牢でまったく機能していません。
ステップ 1: AndroidManifest.xml - これ<intent-filter>
を に追加し<activity>
、「urlScheme」を好きなように変更します。この場合、urlScheme:///?key=val へのリンクをクリックすると、アプリが開きます。
<intent-filter>
<data android:scheme="urlScheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
ステップ 2: myApp.java - 以下を下に追加しますonCreate
。を使用している場合は、ロジックを関数singleTask
に配置してください(他の人がトランペットしたように、 ではなく)。これにより、アプリが既に実行されているかどうかに関係なく、アプリにリンクできます。intent
onStart
onCreate
@Override
public void onStart() {
super.onStart();
final Intent intent = getIntent();
String url = intent.getDataString();
if(url != "" && url != null) {
super.sendJavascript("setTimeout(function() { handleOpenURL('" + url + "'); },1);");
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent); setIntent(intent);
}
onNewIntent
オーバーライドの説明については、受け入れられた回答を参照してください。