SmsReceiver
メイン アクティビティに登録したいクラスがありますが、具体的にはどうすればよいですか?
私はAndroidが初めてです。
SmsReceiver
メイン アクティビティに登録したいクラスがありますが、具体的にはどうすればよいですか?
私はAndroidが初めてです。
あなたは2つのことをすることができます:
BroadcastReceiver
するManifest
BroadcastReceiver
します。オプション2(あなたが求めている)の場合:
BroadcastReceiver
コード内 (MyBroadcastReceiver) を作成します。のスコープで MyBroadcastReceiver を宣言しますActivity
。
MyBroadcastReceiver mMyBroadcastReceiver;
を次の方法で登録BroadcastReceiver
しますActivity
。
IntentFilter filter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED);
this.registerReceiver(mMyBroadcastReceiver, filter);
Service に SMS メッセージを受信させるには、次の手順に従います。
Service で、Service クラス内にネストされた BroadcastReceiver クラスを作成します。
private class SMSreceiver extends BroadcastReceiver
{
private final String TAG = this.getClass().getSimpleName();
@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);
}
}
}
}
Service クラスで、登録して
android.provider.Telephony.SMS_RECEIVED
インテント フィルターを受け取ります。
public class ServiceCommunicator extends Service
{
private SMSreceiver mSMSreceiver;
private IntentFilter mIntentFilter;
@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);
}
@Override
public void onDestroy()
{
super.onDestroy();
// Unregister the SMS receiver
unregisterReceiver(mSMSreceiver);
}
}
それでおしまい !
注:
別の BroadcastReceiver クラス内からサービスにバインドしなかった理由を疑問に思っている場合は、利用できないため機能しませbindService()
ん。
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//some action
}
};
IntentFilter filter = new IntentFilter("YOUR_ACTION");
registerReceiver(receiver, filter);
お役に立てれば
あなたがに適合するBroadcastReceiver
あなたの中に登録するように頼んだようにMainActivity
registerReceiver-codewise-inside-MainActivity
コードは次のようになります ==>
public class MainActivity extends Activity
{
BroadcastReceiver smsReceiver;
private IntentFilter myFilter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED);
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
registerReceiver(smsReceiver, myFilter); // register BroadCastReceiver at time of initialization of Activity with proper Intent-Filter
}
@Override
protected void onPause()
{
unregisterReceiver(smsReceiver); // UnRegister BroadCastReceiver as you no longer have your activity at Foreground -- Saving CPU & Battery Drainage
super.onPause();
}
@Override
protected void onResume()
{
registerReceiver(smsReceiver, myFilter); // Register BroadCastReceiver Once again as your activity comes from pause to forground state again.
super.onResume();
}
smsReceiver = new BroadcastReceiver() //Implementation of your BroadCastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Do whatever you like as sms is received and caught by these BroadCastReceiver
Toast.makeText(context, "SMS Received", Toast.LENGTH_LONG).show();
}
};
}