Loading...

android-group-japan@googlegroups.com

[Prev] Thread [Next]  |  [Prev] Date [Next]

[android-group-japan: 5744] Re: Service等からのA ctivityの起動 mfright Thu Jul 29 09:03:12 2010

江川様

ご説明頂きました通り,FLAG_NEW_TASKをintentにsetすることで,Activityを起動する事ができました!!!
具体的には,
Intent i = new
Intent(getApplicationContext(),DeviceListActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
でActivityを起動できました.

また,ServiceのクラスでもBroadcastReceiverが使用できました.
今後,ActivityではなくServiceでなんとか処理できるように改良していきたいと思います.

本当にありがとうございます!

On 7月28日, 午後11:58, egg <[EMAIL PROTECTED]> wrote:
> mfrightさん
>
> 江川です。お返事ありがとうございます。
>
> > FLAG_NEW_TASK定数につきまして勉強致し,試行してみたいと存じます.
>
> 説明不足で申し訳ありません。Intent#setFlagメソッドで上記定数を設定する感じです。
>
> > BroadcastReceiverを使うためやむなく
> > Activityを継承したクラス(あるいはBroadcastReceiverを使えるクラス)を呼び出そうとしております.
>
> Activityと同じくServiceもContextWrapper(のサブクラス)ですので、
> ServiceもregisterReceiverメソッドを持っています。なので、BroadcastReceiverを使うことができます。
> それでは何か問題がありますでしょうか?
>
> ------------------------------------------
> EGAWA Takashi
>
> 2010/7/28 mfright <[EMAIL PROTECTED]>:
>
>
>
> > 江川様
> > FLAG_NEW_TASKにつきましてお教え頂き,ありがとうございます.
>
> >> ただ、ohisamaさんがおっしゃるとおり、あまりそういうことはしません。
> > おっしゃる通りに思います.決してアクティビティを表示させたい訳ではないのですが,BroadcastReceiverを使うためやむなく
> > Activityを継承したクラス(あるいはBroadcastReceiverを使えるクラス)を呼び出そうとしております.
>
> > 恥ずかしながら,経緯としましては...
> > 1.  サンプルソースのBluetoothChatを参考に,周期的に周囲のBluetoothデバイスをサーチするServiceを作ろうとし
> > た.
> > 2.  BluetoothChatでは,Activityの中でContextWrapper.registerReceiver()メソッドを使い
> > 「デバイスを発見した」ときの処理が「登録」されていた.
> > 3.  そのコードをそのまま,Serviceが定期的に呼び出すThreadで使おうと引用したら,
> > 「ContextWrapper.registerReceiverはThreadでは使えない」とEclipseに怒られた.
> > 4.  仕方なく,Activityはそのままにし,ServiceからThreadを呼び出し,そのThreadから定期的にActivityを呼び
> > 出すことにした.
> > となっております.
>
> > 急造品なソフトで,ohisama様のおっしゃる通り,あまり正しくない方法を取っていることは存じ上げております.
> > ただ現状,ThreadではContextWrapper.registerReceiver()は使用できないようなので,無理矢理Activity
> > を呼び出し,ユーザ操作の妨げにならないようsetVisible(false)によって「隠して」おります.
>
> > FLAG_NEW_TASK定数につきまして勉強致し,試行してみたいと存じます.
> > ありがとうございます.
>
> > On 7月28日, 午後4:37, egg <[EMAIL PROTECTED]> wrote:
> >> 江川と申します。
> >> FLAG_NEW_TASKでstartActivityすればServiceからActivityを起動することは可能です。
> >> ただ、ohisamaさんがおっしゃるとおり、あまりそういうことはしません。ユーザーが端末を使って何かの作業やゲームをしている最中かもしれないのに、意図
> >>  しないタイミングでいきなり画面が出てしまうと、ユーザー体験的にはあまりよくないからです。
> >> 察するに、Activityを「隠す」とおっしゃっているので、Activityを起動することが目的ではないのではないでしょうか。もう少し詳しく教えて頂け
> >>  ればいいアドバイスが貰えるかもしれません。
>
> >> ------------------------------------------
> >> EGAWA Takashi
>
> >> 2010/7/27 mfright <[EMAIL PROTECTED]>:
>
> >> > Androidアプリで,アクティビティを起動したいです.
>
> >> > 学生の者です.Androidでアプリを作成しています.サービスまたはスレッドからActivityを呼び出す方法が分からず,お知恵をお借りしたく
> >> > 存じます.
>
> >> > バックグラウンドでBluetoothデバイスを定期的にサーチしたいため,Serviceクラスを継承したクラスを実行しています.
> >> > このサービスからActivityを継承したクラスを以下のように呼び出そうとすると,端末で「〜が予期せず終了しました」と表示されうまくいきませ
> >> > ん.
>
> >> > Intent i = new Intent(getApplicationContext(),BluetoothChat.class);
> >> > startActivity(i);
>
> >> > ちなみに,ServiceではなくActivityを継承したクラスでこれを実行してもエラーにはなりませんでした.webで調べてみましたが,これに
> >> > 関する記述を見つけられませんでした.
> >> > ServiceかThreadなどから,Activityを起動する方法をご存知ないでしょうか.
>
> >> > android公式ページで紹介されているBluetoothChatというサンプルを使い回していますが,BroadcastReceiverという
> >> > オブジェクトをregisterReceiver()するところで,「サービスにはこのメソッドは存在しないよ」とEclipseに怒られるため,やむ
> >> > なくActivityを「隠す」処理でごまかしたいと考えています.
>
> >> > ご意見お願い申し上げます.
>
> >> > --
> >> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> >> > [EMAIL PROTECTED] にメールを送信してください。
> >> > [EMAIL PROTECTED] にメールを送信してください。
> >> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > [EMAIL PROTECTED] にメールを送信してください。
> > [EMAIL PROTECTED] にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。

-- 
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
[EMAIL PROTECTED] にメールを送信してください。
[EMAIL PROTECTED] にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja 
からこのグループにアクセスしてください。