问题描述
我正在使用 Kotlin 构建一个 Android 消息传递应用程序。我的应用程序将在应用程序内发送彩信或照片消息。它不应该使用内置服务发送。我正在尝试使用此库 https://github.com/klinker41/android-smsmms?fbclid=IwAR2lFynDGHsbExnzdhn1fIPX-m55lZxoDJjwwpdL4jgcANP1-8mdjKSFe_8 来实现逻辑。但它没有按预期工作。
这就是我发送彩信的方式。
我使用以下函数初始化设置。
private fun initApns() {
ApnUtils.initDefaultApns(
this
) {
settings =
Settings.get(this@SendOrdinaryMessageActivity,true)
}
}
private fun initSettings() {
settings = Settings[this]
if (TextUtils.isEmpty(settings!!.mmsc) &&
Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP
) {
initApns()
}
}
这是我的 ApnUtils 类。
public class ApnUtils {
private static final String TAG = "ApnUtils";
public ApnUtils() {
}
public static void initDefaultApns(final Context context,final ApnUtils.OnApnFinishedListener listener) {
loadMmsSettings(context);
final ArrayList<ApnUtils.APN> apns = loadApns(context);
if (apns != null && apns.size() != 0) {
if (apns.size() == 1) {
setApns(context,(ApnUtils.APN)apns.get(0));
if (listener != null) {
listener.onFinished();
}
} else if (!PreferenceManager.getDefaultSharedPreferences(context).getBoolean("has_seen_select_apns_warning",false)) {
(new Builder(context)).setTitle(string.auto_select_apn).setMessage(string.auto_select_multiple_apns).setPositiveButton(string.ok,new OnClickListener() {
public void onClick(DialogInterface dialogInterface,int num) {
ApnUtils.showApnChooser(context,apns,listener);
}
}).show();
PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("has_seen_select_apns_warning",true).commit();
} else {
showApnChooser(context,listener);
}
} else {
Log.v("ApnUtils","Found no APNs :( damn CDMA network probably.");
Toast.makeText(context,context.getString(string.auto_select_Failed),0).show();
if (listener != null) {
listener.onFinished();
}
}
}
private static void showApnChooser(final Context context,final ArrayList<ApnUtils.APN> apns,final ApnUtils.OnApnFinishedListener listener) {
CharSequence[] items = new CharSequence[apns.size()];
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
String curMmsc = sharedPrefs.getString("mmsc_url","");
String curProxy = sharedPrefs.getString("mms_proxy","");
String curPort = sharedPrefs.getString("mms_port","");
int defaultApn = -1;
for(int i = 0; i < items.length; ++i) {
ApnUtils.APN apn = (ApnUtils.APN)apns.get(i);
items[i] = i + 1 + ". " + apn.name;
if (apn.mmsc.equals(curMmsc) && apn.proxy.equals(curProxy) && apn.port.equals(curPort)) {
defaultApn = i;
}
}
(new Builder(context)).setSingleChoiceItems(items,defaultApn,new OnClickListener() {
public void onClick(DialogInterface dialogInterface,int i) {
ApnUtils.setApns(context,(ApnUtils.APN)apns.get(i));
if (listener != null) {
listener.onFinished();
}
dialogInterface.dismiss();
}
}).setonCancelListener(new OnCancelListener() {
public void onCancel(DialogInterface dialogInterface) {
if (listener != null) {
listener.onFinished();
}
}
}).show();
}
private static void loadMmsSettings(Context context) {
XmlResourceParser parser = context.getResources().getXml(xml.mms_config);
String maxMessageSize = "1000000";
int maxImageHeight = 800;
int maxImageWidth = 800;
String userAgent = "Android Messaging";
String uaProfUrl = "http://www.gstatic.com/android/hangouts/hangouts_mms_ua_profile.xml";
String tag;
String name;
try {
beginDocument(parser,"mms_config");
while(true) {
nextElement(parser);
tag = parser.getName();
if (tag == null) {
break;
}
name = parser.getAttributeName(0);
String value = parser.getAttributeValue(0);
String text = null;
if (parser.next() == 4) {
text = parser.getText();
}
Log.v("ApnUtils","tag: " + tag + " value: " + value + " - " + text);
if ("name".equalsIgnoreCase(name)) {
if ("int".equals(tag)) {
if ("maxMessageSize".equalsIgnoreCase(value)) {
maxMessageSize = text;
} else if ("maxImageHeight".equalsIgnoreCase(value)) {
maxImageHeight = Integer.parseInt(text);
} else if ("maxImageWidth".equalsIgnoreCase(value)) {
maxImageWidth = Integer.parseInt(text);
}
} else if ("string".equals(tag)) {
if ("userAgent".equalsIgnoreCase(value)) {
userAgent = text;
} else if ("uaProfUrl".equalsIgnoreCase(value)) {
uaProfUrl = text;
}
}
}
}
} catch (XmlPullParserException var16) {
Log.e("ApnUtils","loadMmsSettings caught ",var16);
} catch (NumberFormatException var17) {
Log.e("ApnUtils",var17);
} catch (IOException var18) {
Log.e("ApnUtils",var18);
} finally {
parser.close();
}
tag = null;
if (tag != null) {
name = String.format("MmsConfig.loadMmsSettings mms_config.xml missing %s setting",tag);
Log.e("ApnUtils",name);
}
if (VERSION.SDK_INT >= 19) {
TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService("phone");
userAgent = telephonyManager.getMmsUserAgent();
uaProfUrl = telephonyManager.getMmsUAProfUrl();
}
PreferenceManager.getDefaultSharedPreferences(context).edit().putInt("mms_max_width",maxImageWidth).putInt("mms_max_height",maxImageHeight).putString("mms_max_size",maxMessageSize).putString("mms_agent",userAgent).putString("mms_user_agent_profile_url",uaProfUrl).commit();
}
private static ArrayList<ApnUtils.APN> loadApns(Context context) {
XmlResourceParser parser = context.getResources().getXml(xml.apns);
ArrayList<ApnUtils.APN> apns = new ArrayList();
String mmsc = "";
String proxy = "";
String port = "";
String carrier = "";
int mcc = true;
int mnc = true;
TelephonyManager manager = (TelephonyManager)context.getSystemService("phone");
String networkOperator = manager.getNetworkOperator();
String errorStr;
int mcc;
int mnc;
if (isValidNetworkOperator(networkOperator)) {
mcc = Integer.parseInt(networkOperator.substring(0,3));
errorStr = networkOperator.substring(3);
try {
mnc = Integer.parseInt(errorStr.replaceFirst("^0{1,2}",""));
} catch (Exception var27) {
mnc = -1;
}
} else {
mcc = context.getResources().getConfiguration().mcc;
mnc = context.getResources().getConfiguration().mnc;
}
try {
if (mcc == -1) {
mcc = Integer.parseInt((new ServiceState()).getoperatorNumeric().substring(0,3));
}
if (mnc == -1) {
TelephonyManager tm = (TelephonyManager)context.getSystemService("phone");
mnc = ((CdmaCellLocation)tm.getCellLocation()).getSystemId();
}
} catch (Exception var26) {
}
if (mcc != -1 && mnc != -1) {
Log.v("ApnUtils","mcc: " + mcc + " mnc: " + mnc);
try {
beginDocument(parser,"apns");
label301:
while(true) {
int i;
do {
boolean mccCorrect;
boolean mncCorrect;
int i;
String name;
do {
do {
nextElement(parser);
errorStr = parser.getName();
if (errorStr == null) {
break label301;
}
mccCorrect = false;
mncCorrect = false;
for(i = 0; i < parser.getAttributeCount(); ++i) {
try {
name = parser.getAttributeName(i);
i = Integer.parseInt(parser.getAttributeValue(i));
if ("mcc".equals(name) && mcc == i) {
mccCorrect = true;
} else if ("mnc".equals(name) && mnc == i) {
mncCorrect = true;
}
} catch (Exception var28) {
}
}
} while(!mccCorrect);
} while(!mncCorrect);
for(i = 0; i < parser.getAttributeCount(); ++i) {
name = parser.getAttributeName(i);
String value = parser.getAttributeValue(i);
if ("type".equals(name)) {
if (!value.contains("mms")) {
mmsc = "";
proxy = "";
port = "";
break;
}
} else if ("mmsc".equals(name)) {
mmsc = value;
} else if ("mmsproxy".equals(name)) {
proxy = value;
} else if ("mmsport".equals(name)) {
port = value;
} else if ("carrier".equals(name)) {
carrier = value;
} else if ("port".equals(name) && port.equals("")) {
port = value;
}
}
} while(mmsc.equals(""));
ApnUtils.APN apn = new ApnUtils.APN();
apn.name = carrier;
apn.mmsc = mmsc;
apn.proxy = proxy;
apn.port = port;
boolean contains = false;
for(i = 0; i < apns.size(); ++i) {
ApnUtils.APN current = (ApnUtils.APN)apns.get(i);
if (current.mmsc.equals(apn.mmsc) && current.port.equals(apn.port) && current.proxy.equals(apn.proxy)) {
contains = true;
break;
}
}
if (!contains) {
apns.add(apn);
}
}
} catch (XmlPullParserException var29) {
Log.e("ApnUtils","loadApns caught ",var29);
} catch (NumberFormatException var30) {
Log.e("ApnUtils",var30);
} catch (IOException var31) {
Log.e("ApnUtils",var31);
} finally {
parser.close();
}
Log.v("ApnUtils","MMSC: " + mmsc + ",MMS Proxy: " + proxy + ",MMS Port: " + port);
errorStr = null;
if (errorStr != null) {
String err = String.format("MmsConfig.loadMmsSettings mms_config.xml missing %s setting",errorStr);
Log.e("ApnUtils",err);
}
return apns;
} else {
Log.v("ApnUtils","Couldn't find both mcc and mnc. mcc = " + mcc + ",mnc = " + mnc);
return null;
}
}
private static boolean isValidNetworkOperator(String networkOperator) {
return networkOperator != null && !networkOperator.isEmpty() && !networkOperator.contains("null");
}
private static void setApns(Context context,ApnUtils.APN apn) {
PreferenceManager.getDefaultSharedPreferences(context).edit().putString("mmsc_url",apn.mmsc).putString("mms_proxy",apn.proxy).putString("mms_port",apn.port).commit();
}
private static void beginDocument(XmlPullParser parser,String firstElementName) throws XmlPullParserException,IOException {
int type;
while((type = parser.next()) != 2 && type != 1) {
}
if (type != 2) {
throw new XmlPullParserException("No start tag found");
} else if (!parser.getName().equals(firstElementName)) {
throw new XmlPullParserException("Unexpected start tag: found " + parser.getName() + ",expected " + firstElementName);
}
}
private static void nextElement(XmlPullParser parser) throws XmlPullParserException,IOException {
int type;
while((type = parser.next()) != 2 && type != 1) {
}
}
private static class APN {
public String name;
public String mmsc;
public String proxy;
public String port;
private APN() {
}
}
public interface OnApnFinishedListener {
void onFinished();
}
}
这是我发送附有照片的彩信的功能。
fun sendMMS(
to: String,messageText: String,settings: com.forkthecoop.com22222.messaging.Settings
) {
val sendSettings = Settings()
//Telephony.Carriers.TYPE
sendSettings.mmsc = settings.mmsc
sendSettings.proxy = settings.mmsProxy
sendSettings.port = settings.mmsPort
sendSettings.useSystemSending = true
var sendTransaction = Transaction(context,sendSettings)
var message = Message(messageText,to)
message.setimage(this.bitmap)
sendTransaction.sendNewMessage(message,Transaction.NO_THREAD_ID)
Toast.makeText(context,"Message sent",Toast.LENGTH_SHORT).show()
}
当我运行代码时,它正在烤消息,“消息已发送”,但它没有向其他设备发送任何消息。我的代码有什么问题,我该如何解决?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)