0

私は Android 開発の経験があまりありません。現在、サービスの onStartCommand メソッドから受信者を登録できません。

英語では次のようになります。アクティビティに 2 つのボタン (サービスの開始/停止) があります。[スタート] ボタンをクリックしたときに、BroadcastReceiver (SMS_RECEIVED) を登録するサービスを実行したくありません。SMS を受信したときに、ログ トレースを表示したくありません。でも見えない!

ブロードキャスト レシーバーを登録できないようですが、サービスが実行されていることはわかっています (ログのおかげです)。

さらに、サービスを永続化し、その結果、BroadcastReceiver を永続化したいと考えています (アプリケーションを終了した場合は、バックグラウンドで実行し、電話を再起動した場合でも)。

私のコードの何が問題なのか誰か教えてもらえますか? ...そして多分私の2番目の質問に助けてください.... :)

ありがとう !

これが私のコードです:

--- アクティビティ : メイン ---

package com.tuto.servicerunbroadcastreceiver;

import XYZ

public class Main extends Activity implements OnClickListener
{
 Button bt_start;
 Button bt_stop;

 @Override
 protected void onCreate(Bundle savedInstanceState) 
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  bt_start = (Button)findViewById(R.id.button1);
  bt_start.setOnClickListener(this);
  bt_stop = (Button)findViewById(R.id.button2);
  bt_stop.setOnClickListener(this);
 }

 @Override
 public void onClick(View v) 
 {  
  switch (v.getId())
  {
   case R.id.button1 :
   {
    Log.d("Button : ", "Button start");
    startService(new Intent(this, svcMessage.class));    
    break ;
   }
   case R.id.button2 :
   {
    Log.d("Button : ", "Button stop");
    stopService(new Intent(this, svcMessage.class));
    break ;
   }
  }
 }  

 @Override
 public boolean onCreateOptionsMenu(Menu menu) 
 {
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }
}

--- サービス : svcMessage ---

package com.tuto.servicerunbroadcastreceiver;

import XYZ;

public class svcMessage extends Service 
{
 private static final String ACTION_RECEIVE_SMS =    "android.provider.Telephony.SMS_RECEIVED";
 private BroadcastReceiver br_receiver;

 @Override
 public IBinder onBind(Intent arg0) 
 {
  return null;
 }

 @Override
 public int onStartCommand(Intent intent, int flags, int startId)
 {
  final IntentFilter filter = new IntentFilter();
  filter.addAction("ACTION_RECEIVE_SMS");
  Log.d("Service : ", "start");
  this.br_receiver = new BroadcastReceiver() 
  {
   @Override
   public void onReceive(Context context, Intent intent) 
   {
    Log.d("LOG : ", "onReceive");
   }
  };
  this.registerReceiver(this.br_receiver, filter);  
  return (START_STICKY);
 }

 @Override
 public void onDestroy()
 {
  super.onDestroy();
  Log.d("Service : ", "destroy");
  this.unregisterReceiver(this.br_receiver);
 }  
}

--- Manifest.xml ---

<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tuto.servicerunbroadcastreceiver"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.tuto.servicerunbroadcastreceiver.Main"
            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="com.tuto.servicerunbroadcastreceiver.svcMessage">
        </service>
    </application>
</manifest>
4

1 に答える 1