Сделать приложение "Ион" в списке "Поделиться" и получить данные
Я пытаюсь получить приложение Ionic, чтобы появиться в списке "Поделиться", когда пользователь нажимает кнопку "Поделиться", например, для изображения.
Насколько я понимаю, мне нужно добавить что-то вроде
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
до AndroidManifest.xml
. Что я могу сделать, используя плагин cordova-custom-config, я думаю.
Тогда мне пришлось бы как-то справиться с этим намерением, и именно поэтому мне становится сложно. Кажется, что единственный плагин cordova, который в настоящее время поддерживается для намерений, этот. Я попытался использовать его следующим образом:
initializeApp() {
this.platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.
this.statusBar.styleDefault();
this.splashScreen.hide();
this.registerBroadcastReceiver();
});
}
private registerBroadcastReceiver(){
window.plugins.intentShim.registerBroadcastReceiver({
filterActions: [
'com.darryncampbell.cordova.plugin.broadcastIntent.ACTION'
]
},
function(intent) {
// Broadcast received
console.log('Received Intent: ' + JSON.stringify(intent.extras));
}
);
}
Но таким образом я получаю сообщение об ошибке, что window.plugins undefined. Я действительно не знаю, как бы интегрировать это с Ionic.
Также это работает только для Android, мне бы тоже хотелось, чтобы это работа для iOS.
Этот вопрос, относящийся к этому вопросу, связан и описывает способ сделать это для iOS, но ему около 4 лет (связанные части iOS 5 лет) и веб-сайт проекта, указанный для Android в ответе уже не существует.
Было бы здорово, если бы кто-то помог мне здесь.
Связано также:
Обновление
Все ответы сосредоточены только на Android, я действительно надеялся, что кто-то может указать мне в правильном направлении для iOS, поскольку мне это понадобится еще больше...
Окончательный вывод и награда
Bounty
После долгих размышлений я пришел к выводу, чтобы дать щедрость @Ганди. Хотя никто не мог дать полный ответ, он был единственным, кто пытался ответить на весь вопрос, включая часть iOS. Я не ожидал полного решения для кода, просто указателя в правильном направлении для Android и iOS и того, к чему он ближе всего подходит для всех ответов. Я знаю, что это очень широкий вопрос и Я хотел бы поблагодарить всех, кто нашел время, чтобы ответить и/или прокомментировать этот вопрос.
Для других, кто пытается выполнить одно и то же, вот что я заключил из всех моих исследований и ответов здесь
Android
Как уже описано выше, вы должны добавить эти строки в AndroidManifest.xml
. Затем Android запустит ваше приложение в списке общего доступа. Данные, полученные вашим приложением, вам придется обрабатывать с помощью так называемого Intent. Для этого вы можете использовать Ionic Native - Web Intent. Начиная с 9.5.2017 это еще не сработало, поскольку использование плагина Ionic Native больше не существует. Однако я создал проблему в Github, где мне сказали, что следующая версия Ionic Native (я думаю, 3.7.0), которая должна быть выпущенный в течение следующих двух недель, должен исправить это, используя plugin, упомянутый выше в моем вопросе. Это решает вопрос о том, чтобы любить играть вокруг Ionic Framework самостоятельно и просто быть в состоянии использовать Ionic Native.
IOS
В iOS это выглядит немного сложнее, и его также можно найти в Интернете. Лучше всего вы следуете ссылке, которую @Ghandi дает в своем ответе ниже.
Ответы
Ответ 1
После некоторого подробного анализа это то, что я мог заключить:
В Android вы можете просто добавить свое приложение в список общего доступа, используя намерение cordova-plugin, как описано здесь. Вы также можете достичь этого, добавив фильтр намерений в действие, как описано здесь
В iOS это немного сложно, поскольку для этого нет прямых плагинов или готового решения. Но лучшая возможная ссылка, которую я мог бы связать с добавлением приложения в меню общего доступа iOS, отображается в общем меню. В эту ссылку включена документация по яблокам для этого, а также некоторые настройки в Info.plist, чтобы добиться этого.
Это лучший ответ, о котором я мог подумать. Надеюсь, поможет. Приветствия.
Ответ 2
Для запуска плагина https://github.com/darryncampbell/darryncampbell-cordova-plugin-intent,
попробуйте:
-
Установите плагин с --save
, чтобы убедиться, что плагин добавлен в ваш config.xml
ionic plugin add https://github.com/darryncampbell/darryncampbell-cordova-plugin-intent --save
-
Поскольку этот плагин не импортируется в ionic-native
, вам нужно идентифицировать глобальный объект. Это будет объявлено в папке плагина → plugin.xml. Здесь объект intentShim
.
<js-module name="IntentShim" src="www/IntentShim.js">
<clobbers target="intentShim" />
</js-module>
-
В коде объявите глобальный объект как:
declare var intentShim:any;
И в вашей функции
private registerBroadcastReceiver(){
intentShim.registerBroadcastReceiver({
filterActions: [
'com.darryncampbell.cordova.plugin.broadcastIntent.ACTION'
]
},
function(intent) {
// Broadcast received
console.log('Received Intent: ' + JSON.stringify(intent.extras));
}
);
}
Ответ 3
попробуйте
window.intentShim.registerBroadcastReceiver
или функция вызова внутри
document.addEventListener('deviceready', function(){
registerBroadcastReceiver() },
false);
Ответ 4
Вы можете отправлять или получать данные через плагин webIntent, предоставленный ionic.
Ionic:
Ionic CLI : 5.0.2 (C:\Windows\System32\node_modules\ionic)
Ionic Framework : ionic-angular 3.9.5
@ionic/app-scripts : 3.2.2
Cordova:
Cordova CLI : 9.0.0 ([email protected])
Cordova Platforms : android 8.0.0
Cordova Plugins : cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 4.1.0, (and 5 other plugins)
Utility:
cordova-res : not installed
native-run : 0.2.5
System:
Android SDK Tools : 26.1.1 (D:\Android\Sdk)
NodeJS : v12.4.0 (D:\node.exe)
npm : 6.9.0
OS : Windows 8.1
Команда для установки плагина:
ionic cordova plugin add com-darryncampbell-cordova-plugin-intent
npm install --save @ionic-native/[email protected]
Код Для получения данных: (Добавьте "Web-Intent" в провайдере)
import { WebIntent } from '@ionic-native/web-intent';
clickMe() {
console.log('clicked')
this.webIntent.getIntent().then((data) => {
console.log('Success', data);
},
err => {
console.log('Error', err);
});
}