0
Thumbsup

いい質問だ

0

Thumbsdown

うーん

Android Serviceの中からダイレクトでActivityを呼び出したい

kakaro
kakaro 0

投稿日:2015-02-11 00:26:28

お世話になります。
Titanium SDK 3.5.0.GA, Alloy1.5.1でAndroid(4.4.3)のサービスを作りました。
そのサービスはイベントを受け取るとMainActivityを呼び出す単純なものです。
これがMainActivityが生きている間にはサービスから問題なく作動しますが、
「最近使ったアプリ」から消去されると動かなくなります。

MainActivityがないとサービスからはTi.Android.currentActivityがnullになるようで、この現象はサービスファイルの中でTi.Android.currentActivity.sendBroadcast呼んでも同じです。
どうすればサービスからActivityがダイレクトで呼び出せるでしょうか。ご教授お願いします。

    // index.js
    var intent = Ti.Android.createServiceIntent({
        url : 'service.js',
        startMode : Ti.Android.START_REDELIVER_INTENT
    });
    Ti.Android.startService(intent);
    Ti.API.info("################ Service Start! #################");


    // service.js
   var intent = Ti.Android.createIntent({
        packageName : Ti.App.id,
        className : 'クラス名',
        flags : Ti.Android.FLAG_ACTIVITY_NEW_TASK | Ti.Android.FLAG_ACTIVITY_SINGLE_TOP
    });

    Ti.App.addEventListener("service:start", function(e) {
        // MainActivityが死んでしますとTitanium.Android.currentActivityが取れないようです
        Titanium.Android.currentActivity.startActivity(intent);
    });
 


回答

yagi_
yagi_
2540
Tcad_icon Tcmd_icon Tce_icon

Thumbsup

いい回答

0

Thumbsdown

うーん

pendingIntentが使えると思います。index.jsで渡すintentをcreatePendingIntentで作成したら、元のActivityが死んでいても大丈夫なはず。もう酔っているので試していませんが…


ご回答ありがとうございます。 教えていただいた通りやってみました。しかし、pendingIntentを作ってからの次がまったくわかりません (本家のドキュメントにも「Android PendingIntent.getActivity」と同じく新しいactivityをスタートさせるとありますが、私はTitanium初心者でどのようにpendingIntentから新しいactivityをスタートさせるかわかりません) var intent = Ti.Android.createIntent({ packageName : Ti.App.id, className : 'クラス名', flags : Ti.Android.FLAG_ACTIVITY_NEW_TASK | Ti.Android.FLAG_ACTIVITY_SINGLE_TOP }); var pending = Titanium.Android.createPendingIntent({ intent : intent, flags : Ti.Android.FLAG_UPDATE_CURRENT }); // 以下のstartActivityメソードなどありません^^; pending.startActivity(); --- kakaro

ログインすると回答することができます。