常駐プログラムにつきまして

353 views
Skip to first unread message

田中

unread,
Apr 13, 2010, 9:31:53 PM4/13/10
to 日本Androidの会
いつもお世話になっております。
田中です。

アンドロイドアプリにてチェックボックスにチェックをした後に
同アプリを一定期間毎に処理をする、常駐プログラムの作成を行っているのですが
この際のクラス継承につきましてご質問させていただきたいと思います。

常駐プログラムを作成する際に
クラスにServiceクラスを継承すると思うのですが
そうすると、PreferenceActivityクラスが継承できなくなり
CheckBoxPreferenceが使用できず、チェックボックスが使えなくなり
困っています。

そこでいまは、Serviceクラスを継承するクラスをメインクラスとは別に作成し
下記の様な環境を作って試したのですが
Serviceクラスを継承しているクラス内のonStart(){}が呼び出されません。
間違っているヶ所をご指摘頂けませんでしょうか。

----------
○アクティビティを継承したクラス
public class Aaa extends PreferenceActivity
{
protected void onCreate(Bundle savedInstanceState){}
@Override
public boolean onCreateOptionsMenu(Menu menu){}
@Override
public boolean onOptionsItemSelected(MenuItem item){}
}
----------
○サービスを継承したクラス
public class ResidenService extends Service
{
@Override
public void onStart(Intent intent, int startId){}
@Override
public IBinder onBind(Intent arg0){}
}
----------
マニュフェスト.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cosplayers.android.clock"
android:versionName="1.5" android:versionCode="3">
<uses-permission
android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application android:icon="@drawable/icon" android:label="@string/
app_name" android:debuggable="true">
<activity android:name=".Aaa"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".ResidenService" />
</application>
<uses-permission android:name="android.permission.SET_WALLPAPER"></
uses-permission>
</manifest>
----------

よろしくお願い致します。

Takashi Yokoyama

unread,
Apr 13, 2010, 10:48:58 PM4/13/10
to android-g...@googlegroups.com
横山と申します。

私も同じような仕組みのアプリケーションを作成したのですが、
できたと思います。
以下のポイントをチェックしてみて下さい。

// ①サービス起動
Intent intent = new Intent(Aaa.this, ResidenService.class);
startService(intent);

①のコードでサービスを起動できると思います。

②①のコードがあるけど起動しない場合は、通過されているか?

③②も通過していたら、onStart()の先頭にLogを仕込むか、
Eclipse等でブレイクポイントを張ってみる。

よろしくお願い致します。

2010年4月14日10:31 田中 <max-...@nifty.com>:

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

--
横山 隆司
tksyo...@gmail.com

田中

unread,
Apr 14, 2010, 12:58:34 PM4/14/10
to 日本Androidの会
横山さま。

レスありがとうございます。
横山様の仰る通り、サービス起動の処理が
メインクラスのonCreate()から抜けておりました。

上記処理を追記しましたところ無事に起動致しました!
ありがとうございます。

また、更に質問なのですが
端末の電源を入れたときに自動でサービスが動作する処理は下記の様で問題ありませんでしょうか。
----------
○ブロードキャストレシーバーを継承したクラス
public class ResidentserviceStarter extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// TODO 自動生成されたメソッド・スタブ
if( Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction()) )
{
Log.d("ResidentserviceStarter","----- Start resident service
-----");
Intent serviceIntent = new Intent(context,ResidenService.class);
serviceIntent.setAction(ResidenService.START_ACTION);
context.startService(serviceIntent);
}
}
}
----------
○上記サービスを起動させるために、メインクラス(Aaa.java)のonCreate()に
 serviceIntent = new Intent(Aaa.this, ResidentserviceStarter.class);
を追記する。
----------

以上、よろしくお願い致します。

Takashi Yokoyama

unread,
Apr 14, 2010, 8:24:53 PM4/14/10
to android-g...@googlegroups.com
横山です。

ソースコードは問題なさそうですが、
Manifest.xmlの以下のIntent-Filterを入れた方が良さそうです。

<receiver android:name=".ResidentserviceStarter">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>

追加した状態で試してみて下さい。

よろしくお願い致します。

2010年4月15日1:58 田中 <max-...@nifty.com>:

Reply all
Reply to author
Forward
0 new messages