我已经弄明白了如何发送和接收短信.要发送短信,我必须调用该类的sendTextMessage()和sendMultipartTextMessage()方法SmsManager.要接收SMS消息,我必须在AndroidMainfest.xml文件中注册接收器.然后我不得不重写onReceive()方法BroadcastReceiver.我在下面列举了一些例子.
MainActivity.java
public class MainActivity extends Activity {
private static String SENT = "SMS_SENT";
private static String DELIVERED = "SMS_DELIVERED";
private static int MAX_SMS_MESSAGE_LENGTH = 160;
// ---sends an SMS message to another device---
public static void sendSMS(String phoneNumber, String message) {
PendingIntent piSent = PendingIntent.getBroadcast(mContext, 0, new Intent(SENT), 0);
PendingIntent piDelivered = PendingIntent.getBroadcast(mContext, 0,new Intent(DELIVERED), 0);
SmsManager smsManager = SmsManager.getDefault();
int length = message.length();
if(length > MAX_SMS_MESSAGE_LENGTH) …Run Code Online (Sandbox Code Playgroud) 我想读取MMS数据,我已经看到了mmssms.db存储mms条目的部分表; 我正在使用光标,我想知道合适的URI; 我正在使用"content:// mms-sms/conversations"和"地址"(发送到)的列名,"文本"或"主题"和"数据"列图像名称.
我已经看到了mmssms.db部分表的模式和他们的列.
我正在研究多媒体应用程序.我正在通过相机捕获一个图像,并希望将带有文本的图像发送到其他一些数字.但我没有得到如何通过彩信发送图像.
我无法在Google的Messenger应用上发送带有图片的彩信.虽然一些Android设备默认安装这个短信应用程序,为此我发送彩信使用时Intent它不起作用.
问题是ToNumber和MMS内容设置,但图像不附加在此应用程序上.
注意: 我已经在我的设备上设置了MMS APN设置,我已经在多个设备上检查了三星s4,摩托罗拉G4 Plus等应用程序.
这是我目前使用的代码.
String toNumbers = "comma seperated mobile numbers";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
{
String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(getActivity());
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra("address", toNumbers);
sendIntent.setPackage("com.android.mms");
//Uri uri = Uri.fromFile(new File(getContext().getExternalFilesDir(""), "image.png"));
File imagePath = new File(getFilesDir(), "images");
File newFile = new File(imagePath, "image.png");
Uri uri = getUriForFile(this, "packagename", newFile);
File file = new File(contentUri.getPath());
if (file.exists()) {
//Do something
Log.d("TAG","Exist");
}
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.setType("image/png");
sendIntent.putExtra("sms_body", getString(R.string.sms_body, HostName));
if (defaultSmsPackageName != …Run Code Online (Sandbox Code Playgroud) 此代码适用于具有本机android系统的普通google设备.但是在htc感应设备的列表中没有MMS应用程序,我不知道摩托罗拉模糊等:
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("image/png");
emailIntent.putExtra(Intent.EXTRA_STREAM, uri);
context.startActivity(Intent.createChooser(emailIntent, context.getString(R.string.send_intent_name)));
Run Code Online (Sandbox Code Playgroud)
这段代码适用于htc意义,但不适用于Chooser,我真正需要的是:
Intent sendIntent = new Intent("android.intent.action.SEND_MSG");
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.setType("image/png");
context.startActivity(sendIntent);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将这些代码示例组合在一起,我不知道如何以编程方式确定Htc Sense ui.是支持不同类型设备的正确方法吗?
谢谢你的回答.
我正在开发一个应用程序,它需要能够在收件箱或已发送文件夹中保存/创建新的彩信,但我无法弄清楚方法.
我尝试了以下代码,但它给了我异常:
ContentValues values = new ContentValues();
values.put("address", "xxxxxxxxxxx");
values.put("body", "body 3");
values.put("read", "0");
getContentResolver().insert(Uri.parse("content://mms/inbox"), values);
Run Code Online (Sandbox Code Playgroud)
而例外是:
ERROR/Database(118): Error inserting read=0 body=body 3 msg_box=1 date=1306153444 address=xxxxxxxxxxx
ERROR/Database(118): android.database.sqlite.SQLiteException: table pdu has no column named body: , while compiling: INSERT INTO pdu(read, body, msg_box, date, address) VALUES(?, ?, ?, ?, ?);
ERROR/Database(118): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
ERROR/Database(118): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
ERROR/Database(118): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
ERROR/Database(118): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
ERROR/Database(118): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:36)
ERROR/Database(118): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1145)
ERROR/Database(118): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1536)
ERROR/Database(118): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)
ERROR/Database(118): at com.android.providers.telephony.MmsProvider.insert(MmsProvider.java:347)
ERROR/Database(118): at …Run Code Online (Sandbox Code Playgroud) 我想在iOS7上将图像附加到MMS上.我写了以下代码:
MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
messageController.messageComposeDelegate = self;
NSData *imgData = [NSData dataWithContentsOfFile:@"blablabla"];
BOOL didAttachImage = [messageController addAttachmentData:imgData typeIdentifier:@"public.data" filename:@"image"];
if (didAttachImage)
{
// Present message view controller on screen
[self presentViewController:messageController animated:YES completion:nil];
}
else
{
UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Failed to attach image"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[warningAlert show];
return;
}
Run Code Online (Sandbox Code Playgroud)
问题是,当显示SMS屏幕时,它无法识别图像,也无法发送.我看到这样的事情:

我相信这与我发送的imgData或者typeIdentifier有关.
注意:我尝试了几乎所有可能的typeIdentifiers:@"public.data",@"public.image",@"public.item",...等没有工作.
有人可以帮帮我吗?你使用的typeIdentifier是什么?我在iPhone 5,iOS 7.0.2上测试.
谢谢.
解:
正如Greg指示的那样,这解决了我的问题:将文件名设置为@"image.png",将typeIdentifier设置为kUTTypePNG.
[messageController addAttachmentData:imgData typeIdentifier:(NSString *)kUTTypePNG filename:@"image.png"];
Run Code Online (Sandbox Code Playgroud)
谢谢格雷格.
我想将MMS从我的应用程序发送到特定号码.我搜索并找到了这段代码,但我不知道这段代码是否需要我.我的问题是:
- 任何人都可以向我解释这个代码.我是MMS的初学者.
- 而且,我认为这段代码是让用户从我的应用程序发送彩信而不将其移动到本机消息收件箱(这就是我想要的)我是对的吗?
- 我也有问题,我不知道如何把这个代码放在我的项目中.
这就是我发现的
MMS只是一个http-post请求.您应该使用额外的网络功能执行请求:
final ConnectivityManager connMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
final int result = connMgr.startUsingNetworkFeature( ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_MMS);
Run Code Online (Sandbox Code Playgroud)
如果您使用Phone.APN_REQUEST_STARTED值返回结果,则必须等待正确的状态.注册BroadCastReciver并等到Phone.APN_ALREADY_ACTIVE出现:
final IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
context.registerReceiver(reciver, filter);
Run Code Online (Sandbox Code Playgroud)
如果后台连接已准备就绪,则构建内容并执行请求.如果你想使用android的内部代码,请使用:
final SendReq sendRequest = new SendReq();
final EncodedStringValue[] sub = EncodedStringValue.extract(subject);
if (sub != null && sub.length > 0) {
sendRequest.setSubject(sub[0]);
}
final EncodedStringValue[] phoneNumbers = EncodedStringValue.extract(recipient);
if (phoneNumbers != null && phoneNumbers.length > 0) {
sendRequest.addTo(phoneNumbers[0]);
}
final PduBody pduBody = …Run Code Online (Sandbox Code Playgroud) 我有这个代码:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
哪个将成功在Android上启动消息应用程序.
但是,如何在启动意图时附加Bitmap对象?
我已经阅读了http://developer.android.com/reference/Android/content/Intent.html,我需要的东西就是EXTRA_STREAM,就像这样:
intent2.putExtra(Intent.EXTRA_STREAM,_uri);
但我的情况是,我有一个Bitmap对象的引用,而不是Bitmap的URI.
请告诉我如何附加Bitmap对象?
我正在使用类似于另一个SO帖子的代码.但我的每个MMS的MIME类型都是"application/smil".如何确定MMS是否包含图片,音频,文本等?
这是我目前使用的代码:
String selectionPart = "mid =" + id;
Uri ur = Uri.parse("content://mms/part");
Cursor cur = getContentResolver().query(ur, null, selectionPart, null, null);
if (cur.moveToFirst()) {
do {
String[] values = new String[cur.getColumnCount()];
for (int i = 0; i < cur.getColumnCount(); i++) {
values[i] = cur.getString(i);
}
String partId = cur.getString(cur.getColumnIndex("_id"));
String type = cur.getString(cur.getColumnIndex("ct"));
Run Code Online (Sandbox Code Playgroud)
这是音频MMS的值String []中包含的内容:
[56, 98, -1, application/smil, smil.xml, null, null, null, <0000>, smil.xml, null, null, null, <smil>
<smil>
<head>
<layout>
<root-layout height="480px" width="320px"/>
<region fit="meet" height="160px" …Run Code Online (Sandbox Code Playgroud)