Android 应用程序未接收彩信
我正在开发一个短信/彩信系统,我需要该应用程序来接收短信和彩信。它可以接收短信。我正在一部真正的手机上测试(Galaxy S7 Edge运行7.01) 应用程序不接收彩信。根据,我的清单是正确的:Android 应用程序未接收彩信,android,mms,Android,Mms,我正在开发一个短信/彩信系统,我需要该应用程序来接收短信和彩信。它可以接收短信。我正在一部真正的手机上测试(Galaxy S7 Edge运行7.01) 应用程序不接收彩信。根据,我的清单是正确的: <receiver android:name="com.webnation.text2email.receivers.MMSBroadcastReceiver" android:enabled="true" android:permission="andr
<receiver android:name="com.webnation.text2email.receivers.MMSBroadcastReceiver"
android:enabled="true"
android:permission="android.permission.BROADCAST_WAP_PUSH"
android:exported="true">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
然而,在广播接收器的第一行设置断点时,广播接收器永远不会被调用。我包括所有正确的权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_MMS"/>
<uses-permission android:name="android.permission.RECEIVE_WAP_PUSH"/>
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="com.android.vending.BILLING" />
我的广播接收器:
public class MMSBroadcastReceiver extends BroadcastReceiver {
private static final String ACTION_MMS_RECEIVED = "android.provider.Telephony.WAP_PUSH_DELIVER";
private static final String MMS_DATA_TYPE = "application/vnd.wap.mms-message";
// Retrieve MMS
public void onReceive(Context context, Intent intent) {
this.context = context; <------- break point set here.
String action = intent.getAction();
String type = intent.getType();
int typeMessage = -1;
byte[] pushData;
GenericPdu pdu = null;
Toast.makeText(context, "MMS received", Toast.LENGTH_LONG).show();
if (action.equals(ACTION_MMS_RECEIVED) && type.equals(MMS_DATA_TYPE)) {
Bundle bundle = intent.getExtras();
Timber.d("bundle " + bundle);
if (bundle != null) {
pushData = intent.getByteArrayExtra("data");
PduParser parser = new PduParser(pushData);
pdu = parser.parse();
PduHeaders headers = pdu.getPduHeaders();
Timber.d("buffer " + pushData);
String incomingNumber = new String(pushData);
int indx = incomingNumber.indexOf("/TYPE"); // not used, parse the number in MMUtils.getAddress instead
if (indx > 0 && (indx - 15) > 0) {
int newIndx = indx - 15;
incomingNumber = incomingNumber.substring(newIndx, indx);
char[] characters = incomingNumber.toCharArray();
int index = 0;
for (int i=0;i<characters.length;i++) {
if (Character.isDigit(characters[i]) ){
index = i;
break;
}
}
//indx = incomingNumber.indexOf("+");
if (index > 0) {
incomingNumber = incomingNumber.substring(index);
TelephonyManager tm = (TelephonyManager)context.getSystemService(context.getApplicationContext().TELEPHONY_SERVICE);
String countryCode = tm.getNetworkCountryIso().toUpperCase();
try {
String prefix = CountryToPhonePrefix.prefixFor(countryCode).replace("+", "");
int indexOfBaseNumber = incomingNumber.indexOf(prefix);
if (indexOfBaseNumber > -1) {
if (indexOfBaseNumber == 0) {
int lengthPrefix = prefix.length();
indexOfBaseNumber = indexOfBaseNumber + lengthPrefix;
}
incomingNumber = incomingNumber.substring(indexOfBaseNumber);
}
} catch (IllegalArgumentException ie) {
Timber.e(ie);
} catch (IndexOutOfBoundsException ie) {
Timber.e(ie);;
}
Timber.d("Mobile Number: " + incomingNumber);
}
}
int transactionId = bundle.getInt("transactionId", -1);
Timber.d("transactionId " + transactionId);
int pduType = bundle.getInt("pduType", -1);
Timber.d("pduType " + pduType);
byte[] buffer2 = bundle.getByteArray("header");
if (buffer2 != null) {
String header = new String(buffer2);
Timber.d("header " + header);
}
List<MMSMessage> textMessages = MMSUtils.getMessagesFrom(context, intent); //meat of onReceive()
sendMessages(textMessages);
} else {
Timber.e("Invalid PUSH data");
}
}
}
}
公共类MMSBroadcastReceiver扩展了BroadcastReceiver{
私有静态最终字符串操作\u MMS\u RECEIVED=“android.provider.Telephony.WAP\u PUSH\u DELIVER”;
私有静态最终字符串MMS_DATA_TYPE=“application/vnd.wap.MMS message”;
//检索彩信
公共void onReceive(上下文、意图){
this.context=context;0&(indx-15)>0){
int newIndx=indx-15;
incomingNumber=incomingNumber.substring(newIndx,indx);
char[]characters=incomingNumber.toCharArray();
int指数=0;
对于(int i=0;i 0){
incomingNumber=incomingNumber.子字符串(索引);
TelephonyManager tm=(TelephonyManager)context.getSystemService(context.getApplicationContext().TELEPHONY_服务);
字符串countryCode=tm.getNetworkCountryIso().toUpperCase();
试一试{
字符串前缀=CountryToPhonePrefix.prefixFor(countryCode.replace(“+”,”);
int indexOfBaseNumber=incomingNumber.indexOf(前缀);
如果(indexOfBaseNumber>-1){
如果(indexOfBaseNumber==0){
int lengthPrefix=prefix.length();
indexOfBaseNumber=indexOfBaseNumber+长度前缀;
}
incomingNumber=incomingNumber.substring(indexOfBaseNumber);
}
}捕获(IllegalArgumentException ie){
木材(e),;
}捕获(IndexOutOfBoundsException ie){
木材;;
}
木材d(“移动电话号码:”+收入号码);
}
}
int transactionId=bundle.getInt(“transactionId”,-1);
木材d(“交易ID”+交易ID);
intpdutype=bundle.getInt(“pduType”,-1);
木材d(“pduType”+pduType);
字节[]buffer2=bundle.getByteArray(“头”);
if(buffer2!=null){
字符串头=新字符串(缓冲区2);
木材d(“收割台”+收割台);
}
List textMessages=MMSUtils.getMessagesFrom(context,intent);//onReceive()的肉
发送消息(文本消息);
}否则{
Timber.e(“无效推送数据”);
}
}
}
}
我做错了什么 将以下内容添加到清单中我的主要活动似乎解决了问题:
<activity
android:name="com.webnation.text2email.main.SMSEmailActivity"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
@MikeM。事实上,我试过使用WAP_PUSH_接收到的信息,但没有成功。那么,从这以后,你做了哪些改变:?@MikeM。除了收到的WAP\u PUSH\u外,什么都没有。我想我没有跟上。你是说它从来没用过?或者它在这个特定的设备上不工作?或者在升级版本时它停止工作?或者别的什么?它在我的设备上不工作-不确定它是否会在其他设备上运行。在调试中添加正确的权限后,它会短暂工作,但在完全不在调试中时就不工作了。然后我尝试添加WAP\u PUSH\u DELIVER,但它仍然不起作用。