Titanium Appcelerator: Как установить фокус на окно приложения? - PullRequest
1 голос
/ 14 июля 2011

Что такое метод Titanium, который смещает фокус приложения на приложение Titanium, когда происходит событие?Например, мое приложение постоянно работает в фоновом режиме, и я хочу, чтобы окно открывалось при получении электронной почты.

Ответы [ 3 ]

1 голос
/ 15 октября 2016

Вы хотите, чтобы приложение Ti открывалось при получении электронного письма на устройстве?

Насколько я знаю, это не произойдет автоматически (как я мог видеть, многие разработчики злоупотребляют этим).

Однако я предлагаю добавить схему URI (URL-ссылку или кнопку) в сообщение электронной почты, например: yourApp://view?id=abc, который пользователь может щелкнуть, и он откроет ваше приложение и откроет окно / представление / контроллер в вашем приложении. Для этого вам нужно будет добавить схемы URI в ваше приложение, обработать URL-адрес, проанализировать его, и что-то полезное с ним в вашем приложении ... вот как:

В tiapp.xml приложения добавьте это для iOS:

<dict>
    <key>CFBundleURLName</key>
    <!-- same as ti:app/id -->
    <string>your.app.id</string>
    <key>CFBundleURLSchemes</key>
       <array>
          <!-- your custom scheme -->
          <string>yourApp</string>
       </array>
 </dict> 

На Android в tiapp.xml в узле манифеста:

<application>
                <activity android:configChanges="keyboardHidden|orientation" android:label="Your App"
                          android:name=".MyAppActivity" android:theme="@style/Theme.Titanium"
                          android:launchMode="singleTask" >
                          <!-- add the above launchMode attribute -->
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN"/>
                        <category android:name="android.intent.category.LAUNCHER"/>
                    </intent-filter>
                    <!-- add the below additional intent-filter -->
                    <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="yourApp" />
                    </intent-filter>
                </activity>
            </application>

В Alloy.js:

if (OS_ANDROID) {
    // Somehow, only in alloy.js we can get the data (URL) that opened the app
    Alloy.Globals.url = Ti.Android.currentActivity.intent.data;
}

В вашем главном app.js или index.js:

// We don't want our URL to do anything before our main window is open
$.index.addEventListener('open', function (e) {

    if (OS_IOS) {

        // Handle the URL in case it opened the app
        handleURL(Ti.App.getArguments().url);

        // Handle the URL in case it resumed the app
        Ti.App.addEventListener('resumed', function () {
            handleURL(Ti.App.getArguments().url);
        });

    } else if (OS_ANDROID) {

        // On Android, somehow the app always opens as new
        handleURL(Alloy.globals.url);
    }
});

var XCallbackURL = require('XCallbackURL');

function handleUrl(url) {
    var URL = XCallbackURL.parse(url),
        controller = URL.action(),
        args = URL.params();

    // Add some better logic here ;)
    Alloy.createController(controller, args || {}).getView().open();
}

Вы также можете узнать более подробную информацию здесь: http://fokkezb.nl/2013/08/26/url-schemes-for-ios-and-android-1/

0 голосов
/ 17 октября 2016

Есть некоторые проблемы с вашим примером кода:

  • Вы не можете обрабатывать входящие электронные письма с вашим приложением (по крайней мере, в iOS).Оно ограничено iOS для обеспечения конфиденциальности пользователя
  • . URL-схемы используются для обработки ссылок на ваше приложение (например, myapp:// из браузера или других приложений)
  • .для обработки URL-схем используйте событие handleurl, которое доступно в Titanium SDK 5.5.0.GA и более поздних версиях
  • Убедитесь, что вы удаляете прослушиватели событий после выхода из текущего контекста,особенно когда вы добавляете обработчики событий в событие open / focus

Если вы следуете этим правилам, вы сможете получать и обрабатывать URL-адреса, касающиеся вашего приложения, спасибо!

0 голосов
/ 15 июля 2011
win.addEventListener('focus',function() {
    // your code here
}

Вы можете использовать setTimeOut() javascript, который запустит другое действие, когда всплывет ваше всплывающее окно, представление или окно электронной почты.

...