2015-09-30 29 views
6

最新のionic 1.1.0リリース(Cordova 5.xを使用)を実行しています。 Chromeでウェブサイトを閲覧し、ウェブの意図を使って私のイオン性アンドロイドアプリにそのURLを送信できるようにしようとしています。私のアプリケーションはコンパイルされ、実行されますが、共有を使用してクロム(または他のアプリ)から機能を作り、共有するアプリを選択しようとすると、アプリがクラッシュします。別のアプリからwebintent経由でionic android appにURLを送信

私は最初のプラグインを使用しようとしました:

イオン性プラグインがhttps://github.com/Initsogar/cordova-webintent

を追加し、プラグインを削除し、私はまた、より最近更新フォークを試してみました:

イオン性プラグインがhttps://github.com/fluentstream/cordova-webintent

を追加

私のapp.jsファイルに次のコードを入れました:

.run(function($ionicPlatform, $rootScope, $ionicHistory, $state) { 
    $ionicPlatform.ready(function() { 
    window.plugins.webintent.getExtra(window.plugins.webintent.EXTRA_TEXT, 
    function(url) { 
     incomingURL = url; 
     //alert(incomingURL); 
     console.log(incomingURL); 
    }, function() { 
     incomingURL = false; 
     //alert("no url"); 
     console.log("no url"); 
    }); 
    }); 
}) 

私も試した:私は置くファイルconfig.xmlに

.run(function($ionicPlatform, $rootScope, $ionicHistory, $state) { 
    $ionicPlatform.ready(function() { 
    window.plugins.webintent.getUri(function(url) { 
     if(url !== "") { 
      alert(url);//url is the url the intent was launched with 
     } 
    }); 
    }); 
}) 

を:

<plugin name="WebIntent" value="com.borismus.webintent.WebIntent"/> 

のAndroidManifest.xmlで、私は手動で置く:

<activity android:name="ShareActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.SEND" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</activity> 

アプリが実行されますが、クロムに行き、共有ボタンをクリックしてから自分のアプリを選択すると、次のアンドロイドメッセージが表示されます:

残念ながら、MyAppNameは停止しました。

誰かが私のアプリを使って共有しようとする意図を共有する方法を提案することができます...または何かを忘れて何か間違っていますか?

ありがとうございました!

答えて

4

この問題は、AndroidManifest.xmlファイルの設定方法に起因することが判明しました。

アクティビティにインテントを含める必要があるときに、余分なアクティビティタグを使用していました。

は、例えば私が持っていた:

<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize"> 
    <intent-filter android:label="@string/launcher_name"> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
<activity android:name="ShareActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.SEND" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</activity> 

私が持っていたはずです時:

<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize"> 
    <intent-filter android:label="@string/launcher_name"> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.intent.action.SEND" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</activity> 
3

この質問は少し熟成されます。しかし、私は多少なりとも似たような挑戦をしました。私はWebIntentプラグインに運がなかったので、AndroidのIntentsを扱うための独自のプラグインを開発しました。 https://github.com/napolitano/cordova-plugin-intent

私はまだ私自身のプロジェクトのためにこのプラグインに取り組んでいるものの、それはまだほとんど使用可能だとドキュメンテーションは、ドアに足を取得するのに十分良いことがあります:

あなたはこれをチェックすることがあります。

いくつかの背景:

サードパーティーのアプリは、あなたのアプリにコンテンツを送信できるようにするには、AndroidManifest.xmlにのあなたMainActivityにインテントフィルタを追加する必要があります。

<intent-filter> 
    <action android:name="android.intent.action.SEND" /> 
    <action android:name="android.intent.action.SEND_MULTIPLE" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="*/*" /> 
</intent-filter> 

これを手動で行うことはできますが、これにはいくつかの欠点があります。そのため、フックなどが欲しいと思うかもしれません。上のリポジトリに行くと、その例が見つかります。

さらにインテントフィルタには、a)コード起動のために(アプリケーション起動時に送信されたコンテンツにアクセスすることが重要です)、onNewIntentイベントが発生した場合に通知を受け取るプラグインが必要です。これは、アプリケーションの実行中にコンテンツが送信された場合に発生します。

これは私のプラグインがしていることです。コードワードへのアクセスを提供し、onNewIntentイベントを処理できるようにします。

例:

window.plugins.intent.getCordovaIntent(function (Intent) { 
    console.log(Intent); 
}, function() { 
    console.log('Error'); 
}); 

window.plugins.intent.setNewIntentHandler(function (Intent) { 
    console.log(Intent); 
}); 

あなたが成功した場合に、結果として限られた目的のオブジェクトを受け取ります。これはあなたのアプリで処理することができます。

例:

{ 
    "action": "android.intent.action.SEND_MULTIPLE", 
    "clipItems": [ 
     { 
      "uri": "file:///storage/emulated/0/Download/example-document.pdf" 
     }, 
     { 
      "uri": "file:///storage/emulated/0/Download/example-archive.zip" 
     } 
    ], 
    "flags": 390070273, 
    "type": "*/*", 
    "component": "ComponentInfo{com.example.droid/com.example.droid.MainActivity}", 
    "extras": "Bundle[mParcelledData.dataSize=596]" 
} 

この例では、実際にJSONを示しているが、あなたはすぐに使用できるオブジェクトを受け取ります。

私は自分のニーズに合わせてプラグインを開発しています。しかしそれはあなたのためにも働くかもしれません。現在のところ、角度の例はREADMEに追加されていませんが、大きな問題ではないはずです。

+0

私はhttps://github.com/Initsogar/cordova-webintentプラグインを使用していますが、これはうまく動作しているようですが、config.xmlのAndroidLaunchMode設定についてのご意見は、私にとっては非常に役立ちました。ありがとう! –

+0

@Axel Napolitano、あなたのプラグインを使用しようとしていますが、私は意図していますが、clipItemsがありません。私は間違って何をしていますか?私はプラグインページとまったく同じ設定をしています。また、getRealPathFromContentUrl()が関数ではないというエラーメッセージが表示されます。 – Strabek

+0

それは私のために働いたので、ちょっと、最後の月にそれに多くの時間を費やしていない。私はそれを見ていますが、私の現在の作業負荷のためにすぐに解決策を約束することはできません。そのために残念 :-/ –

関連する問題