1

受信した SMS をリッスンするアプリケーションを作成しました。
2 トラブル発生。まず、アプリを閉じてもサービスが実行されていることに気付きました。2 つ目は、sms.xml レイアウトに書き込むことができなかったことです。トーストは表示されますが、画面には書き込まれません。

これが私の活動です。

import android.app.Activity;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.IBinder;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

public class SMSGoster extends Activity {

    public TextView t;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sms);
        t=(TextView) findViewById(R.id.smsText);
        t.setText("Okumaya Baslandı!\n");
    }

    public class SMSService extends Service {

        private SMSreceiver mSMSreceiver;
        private IntentFilter mIntentFilter;
        public TextView t;

        @Override
        public void onCreate() {
            super.onCreate();
            // SMS event receiver
            mSMSreceiver = new SMSreceiver();
            mIntentFilter = new IntentFilter();
            mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
            registerReceiver(mSMSreceiver, mIntentFilter);
            t=(TextView) findViewById(R.id.smsText);
        }

        @Override
        public void onDestroy() {
            super.onDestroy();

            // Unregister the SMS receiver
            unregisterReceiver(mSMSreceiver);
        }

        @Override
        public IBinder onBind(Intent arg0) {
            // TODO Auto-generated method stub
            return null;
        }



    }

    private class SMSreceiver extends BroadcastReceiver {
        private final String TAG = this.getClass().getSimpleName();
        public TextView t;
        @Override
        public void onReceive(Context context, Intent intent) {
            Bundle extras = intent.getExtras();

            String strMessage = "";

            if (extras != null) {
                Object[] smsextras = (Object[]) extras.get("pdus");

                for (int i = 0; i < smsextras.length; i++) {
                    SmsMessage smsmsg = SmsMessage
                            .createFromPdu((byte[]) smsextras[i]);

                    String strMsgBody = smsmsg.getMessageBody().toString();
                    String strMsgSrc = smsmsg.getOriginatingAddress();

                    strMessage += "SMS from " + strMsgSrc + " : " + strMsgBody;

                    Log.i(TAG, strMessage);
                    smsReceived(strMessage);
                    Toast.makeText(getApplicationContext(), strMessage,
                            Toast.LENGTH_LONG).show();
                }

            }

        }
        public void smsReceived(String s) {
            t=(TextView) findViewById(R.id.smsText);
            t.append(s);
        }
    }

}

これはレイアウトです: sms.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/smsText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

そして、これはマニフェスファイルです:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.emre"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
     <activity
            android:name="SMSGoster"
            android:label="@string/app_name" >
            <service
                android:name="SMSService"
                android:enabled="true" >
                <intent-filter>
                    <action android:name="SMSService" />
                </intent-filter>
            </service>
        </activity>
    </application>
</manifest>

どんなアドバイスも素晴らしいでしょう!よろしくお願いします。

4

1 に答える 1

0

2 つの質問のいずれかにお答えします。

サービスは、バックグラウンドで実行されているもの、たとえば SMS メッセージを監視するためのものである必要があります (私が想定しているように)。

これは、アクティビティ間でアクティブであることを意味します。

アプリを閉じたときにサービスをオフにする場合は、2 つのオプションがあります。

  • オーバーライドして、すべてのアクティビティでサービスを強制終了しますonPaused()
  • 実装するすべてのアクティビティが継承する「親アクティビティ」を作成しますonPaused()

これらの方法がわからない場合は、コードサンプルを投稿できます:)

SO では、個々の質問に個別に回答することをお勧めします。ですから、2 番目の質問を 2 番目の提出物に書いてください。私もそれに答えます。コメントの返信にリンクを含めてください。

あなたがせっかちな場合は、ヒントを提供します。サービスは直接の UI に非常に疎結合されているため、サービスから UI に何かを送信する方法を見つける必要があります...これを行う方法があります。 :)

于 2012-05-21T22:40:25.490 に答える