我有一個IntentService用於通過SmsManager異步發送文本消息給人。我面臨的問題是,我註冊的服務是在完成這兩項操作中的任何一項時,發送/發送接收器以偵聽。這裏是我的代碼:IntentService + SmsManager沒有得到onReceive調用registeredReceivers
public static final String SENT = "SMS_SENT";
private int mPartCounter;
public SendTextService(String name){
super(name);
}
public SendTextService(){
super(SendTextService.class.getSimpleName());
}
@Override
protected void onHandleIntent(Intent intent) {
mMessage = intent.getStringExtra(MESSAGE_CONTENT);
mNumbers = intent.getStringArrayExtra(MESSAGE_CONTACTS);
registerReceivers();
sendMessage();
}
private void sendMessage(String message, String number){
SmsManager smsManager = SmsManager.getDefault();
ArrayList<String> splitMessage = smsManager.divideMessage(message);
mPartCounter = splitMessage.size();
/* Handle multipart messages */
ArrayList<PendingIntent> sendIntents = new ArrayList<>();
ArrayList<PendingIntent> deliverIntents = new ArrayList<>();
PendingIntent sendIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT"), 0);
PendingIntent deliverIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_DELIVERED"), 0);
/* Add a PendingIntent for send/deliver for each part needed */
for(int i=0; i<mPartCounter; ++i) {
sendIntents.add(sendIntent);
deliverIntents.add(deliverIntent);
}
/* Send the messages in either multi-parts or single */
smsManager.sendTextMessage(number, null, message, sendIntent, deliverIntent);
}
private void registerReceivers(){
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS sent", Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(getBaseContext(), "SMS sending failed", Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(SENT));
}
我設置了斷點,代碼永遠不會在這裏,但消息確實發送?任何人都看到了問題?
哦一切,我通過我自己的接收開始我的服務:
static public class MessageReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent textService = new Intent(context, SendTextService.class);
textService.putExtra(MESSAGE_CONTENT, intent.getStringExtra(MESSAGE_CONTENT));
textService.putExtra(MESSAGE_CONTACTS, intent.getStringArrayExtra(MESSAGE_CONTACTS));
context.startService(textService);
}
}
而且在我的AndroidManifest.xml中都定義:
<service android:name=".service.SendTextService"/>
<receiver android:name=".service.SendTextService$MessageReceiver"/>
這是我打電話給我的接收器:
Intent broadcastIntent = new Intent(SendActivity.this, SendTextService.MessageReceiver.class);
broadcastIntent.putExtra(SendTextService.MESSAGE_CONTACTS, mNumbers);
broadcastIntent.putExtra(SendTextService.MESSAGE_CONTENT, mBodyEdit.getText().toString());
sendBroadcast(broadcastIntent);
Logcat有這個輸出,但這是因爲我試圖取消註冊他們,當我看到他們都是森的...但檢測發生在接收器用於處理SNET消息(這就是爲什麼我有這個問題了):
12-02 22:55:36.238 6268-6268/org.thorrism.masstexter E/ActivityThread: Service org.thorrism.masstexter.service.SendTextService has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()?
12-02 22:55:36.238 6268-6268/org.thorrism.masstexter E/ActivityThread: android.app.IntentReceiverLeaked: Service org.thorrism.masstexter.service.SendTextService has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()?
12-02 22:55:36.238 6268-6268/org.thorrism.masstexter E/ActivityThread: at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:1009)
12-02 22:55:36.238 6268-6268/org.thorrism.masstexter E/ActivityThread: at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:810)
12-02 22:55:36.238 6268-6268/org.thorrism.masstexter E/ActivityThread: at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:2068)
12-02 22:55:36.238 6268-6268/org.thorrism.masstexter E/ActivityThread: at android.app.ContextImpl.registerReceiver(ContextImpl.java:2048)
12-02 22:55:36.238 6268-6268/org.thorrism.masstexter E/ActivityThread: at android.app.ContextImpl.registerReceiver(ContextImpl.java:2042)
12-02 22:55:36.238 6268-6268/org.thorrism.masstexter E/ActivityThread: at org.thorrism.masstexter.service.SendTextService.registerReceivers(SendTextService.java:135)
12-02 22:55:36.238 6268-6268/org.thorrism.masstexter E/ActivityThread: at org.thorrism.masstexter.service.SendTextService.startSendMessages(SendTextService.java:66)
12-02 22:55:36.238 6268-6268/org.thorrism.masstexter E/ActivityThread: at org.thorrism.masstexter.service.SendTextService.onHandleIntent(SendTextService.java:51)
清單中的權限?登錄貓的任何錯誤? –
你太快了...是的權限日誌貓確實有一些東西,但沒有關係..我認爲 – rosenthal
我已更新與logcat輸出和權限 – rosenthal