5

そのため、アプリに呼び出される 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に配置してください(他の人がトランペットしたように、 ではなく)。これにより、アプリが既に実行されているかどうかに関係なく、アプリにリンクできます。intentonStartonCreate

@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オーバーライドの説明については、受け入れられた回答を参照してください。

4

2 に答える 2

21

オーバーライドしてみてくださいonNewIntent。問題は、最新のものではなく、を開始したをgetIntent返すことです。ただし、メソッドを使用してオーバーライドできます。IntentActivitysetIntent

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    setIntent(intent); 
}
于 2013-03-13T16:56:05.740 に答える