Android 에서 BroadcastReceiver 는 문자 키워드 자동 답장 기능 을 실현 합 니 다.
6257 단어 broadcastreceiverandroid키워드자동 응답
휴대 전화 문자 감청 을 실현 하 는 방식 은 두 가지 가 있다.하 나 는 ContentObserver 관찰 자 를 통 해 감청 을 실현 하 는 것 이 고,다른 하 나 는 방송 즉 BroadcastReceiver 를 통 해 문자 감청 을 실현 하 는 것 이다.글 에서 BroadcastReceiver 를 사용 하여 새로운 문자 의 신속 한 감청 과 설 정 된 키 워드 를 포함 할 때 자동 으로 답장 을 한다.
효과 그림:
목록 파일 추가 권한:
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
1.사용자 정의 SmsBroadcastReceiver(1)사용자 정의 SmsBroadcastReceiver 는 BroadcastReceiver 에서 계승 하고 OnReceiver 방법 을 다시 씁 니 다.
mContext = context;
// bundle
Bundle bundle = intent.getExtras();
//
SmsMessage msg;
if (null != bundle) {
// pdu ( pdu 16 )
Object[] smsObj = (Object[]) bundle.get("pdus");
for (Object object : smsObj) {
// pdu SmsMessage
msg = SmsMessage.createFromPdu((byte[]) object);
//
String msgBody = msg.getDisplayMessageBody();
//
String number = msg.getOriginatingAddress();
//
long time = msg.getTimestampMillis();
// bean
List<SmSBean> smsList = ShareUtil.getInstance(context).getSMS();
for (SmSBean bean : smsList) {
//
if (!TextUtils.isEmpty(msgBody) && msgBody.contains(bean.key)) {
// ,
AutoSendSms(bean.content, context, number, time, msgBody);
break;
}
}
}
}
(2)문자 자동 발송 방법 정의 AutoSendSms
/**
*
* @param msg
* @param context
* @param number
* @param time
* @param msgBody
*/
private void AutoSendSms(String msg, Context context, String number, long time, String msgBody) {
//
SmsManager SM = SmsManager.getDefault();
//
Class SMClass = SmsManager.class; // SmsManager mSubId
//
Intent sentIntent = new Intent(SENT_SMS_ACTION);
Field field = null;
try {
field = SMClass.getDeclaredField("mSubId");
field.setAccessible(true);
try {
//
int smsType = ShareUtil.getInstance(context).getSMSType();
field.set(SM, smsType);
//1.136
//0.155
sentIntent.putExtra("address", number);
sentIntent.putExtra("msg", msg);
sentIntent.putExtra("time", time);
sentIntent.putExtra("msgBody", msgBody);
PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, sentIntent,0);
//
SM.sendTextMessage(number, null, msg, sentPI, null);
Log.e("TAG", "onCreate: sendTextMessage");
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
2.문자 자동 발송 을 정의 하 는 SmsService
public class SmsService extends Service {
private static final String TAG = SendSMSService.class.getSimpleName();
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Toast.makeText(SendSMSService.this, "SmsService------------", Toast.LENGTH_SHORT).show();
}
}, 10000);
}
}
3.리스트 파일 등록(1)문자 감청 방송 등록
<receiver android:name=".SmsBroadcastReceiver">
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
priority:우선 순위 속성 설정,999 최고 우선 순위(2)문자 발송 서비스 등록
<service android:name=".SmsService" />
4.Activity 에서 키워드 및 답장 내용 설정(1)더 블 카드 모드 에서 발송 카드 선택
RadioGroup 을 사용 하여 더 블 카드 모드 를 선택 하고 선택 한 문자 발송 카드 를 SharePreference 로 저장 합 니 다.
mRgSim.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.rb_1:
simType = 0;
ShareUtil.getInstance(MainActivity.this).saveSMSType(simType);
break;
case R.id.rb_2:
simType = 1;
ShareUtil.getInstance(MainActivity.this).saveSMSType(simType);
break;
default:
ShareUtil.getInstance(MainActivity.this).saveSMSType(simType);
break;
}
}
});
(2)문자 키워드 및 답장 내용 설정
//
mEtSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//
String key = mEtKey.getText().toString().trim();
//
String content = mEtContent.getText().toString().trim();
// bean
SmSBean bean = new SmSBean(key, content);
//
init();
//
mDataList.add(bean);
// sharePreference
ShareUtil.getInstance(MainActivity.this).saveSMS(mDataList);
//
mEtKey.setText("");
mEtContent.setText("");
}
});
총결산위 에서 말 한 것 은 편집장 이 소개 한 안 드 로 이 드 에서 BroadcastReceiver 가 문자 키워드 자동 답장 기능 을 실현 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shirates에서 상대 선택기를 사용하는 방법 - 1부 -이것은 간단하고 강력한 표현입니다(참조). 오른쪽, 아래, 왼쪽, 위 방향으로 상대적으로 위젯을 얻을 수 있습니다. 올바른 방향의 위젯 올바른 방향으로 입력 라벨을 올바른 방향으로 올바른 방향으로 이미지 :오른쪽 버...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.