我正在研究Android应用程序,我需要使用intent发送带有图像的短信但我得到异常ActivityNotFoundException。在所有设备工作正常,但在三星设备与棉花糖版本无法正常工作。 这是我的代码。
Intent sendIntent = new Intent("android.intent.action.SEND");
sendIntent.setClassName("com.android.mms","com.android.mms.ui.ComposeMessageActivity");
sendIntent.putExtra("sms_body", "Miimoji sent from your friend");
sendIntent.putExtra("android.intent.extra.STREAM", Uri.parse("file://" + fileName));
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);
这是errorReport。
02-17 02:32:55.332:E / AndroidRuntime(11322):致命异常:主要 02-17 02:32:55.332:E / AndroidRuntime(11322):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.shareviamms / com.example.shareviamms.MainActivity}:android.content.ActivityNotFoundException:Unable找到明确的活动类{com.android.mms / com.android.mms.ui.ComposeMessageActivity};你有没有在AndroidManifest.xml中声明这个活动? 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2187) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2237) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.ActivityThread.access $ 600(ActivityThread.java:146) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1239) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.os.Handler.dispatchMessage(Handler.java:99) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.os.Looper.loop(Looper.java:137) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.ActivityThread.main(ActivityThread.java:5085) 02-17 02:32:55.332:E / AndroidRuntime(11322):at java.lang.reflect.Method.invokeNative(Native Method) 02-17 02:32:55.332:E / AndroidRuntime(11322):at java.lang.reflect.Method.invoke(Method.java:511) 02-17 02:32:55.332:E / AndroidRuntime(11322):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) 02-17 02:32:55.332:E / AndroidRuntime(11322):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 02-17 02:32:55.332:E / AndroidRuntime(11322):at dalvik.system.NativeStart.main(Native Method) 02-17 02:32:55.332:E / AndroidRuntime(11322):引起:android.content.ActivityNotFoundException:无法找到显式活动类{com.android.mms / com.android.mms.ui.ComposeMessageActivity};你有没有在AndroidManifest.xml中声明这个活动? 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1618) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.Instrumentation.execStartActivity(Instrumentation.java:1417) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.Activity.startActivityForResult(Activity.java:3370) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.Activity.startActivityForResult(Activity.java:3331) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.Activity.startActivity(Activity.java:3566) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.Activity.startActivity(Activity.java:3534) 02-17 02:32:55.332:E / AndroidRuntime(11322):at com.example.shareviamms.MainActivity.onCreate(MainActivity.java:20) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.Activity.performCreate(Activity.java:5104) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 02-17 02:32:55.332:E / AndroidRuntime(11322):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2151) 02-17 02:32:55.332:E / AndroidRuntime(11322):... 11 more
答案 0 :(得分:1)
您错误地认为设备上必须存在com.android.mms
包(更不用说您错过了try/catch
)。所以这一行不能保证指向有效的应用程序:
sendIntent.setClassName("com.android.mms","com.android.mms.ui.ComposeMessageActivity");
即使它会,但假设ComposeMessageActivity
也可用,也是错误的。
发送内容的正确方法是使用SmsManager,即:
SmsManager sms=SmsManager.getDefault();
sms.sendTextMessage(...)
答案 1 :(得分:1)
三星设备可能使用的不是com.android.mms
实际上你只能用
来做Intent sendIntent = new Intent(Intent.ACTION_SEND);
而不是
Intent sendIntent = new Intent("android.intent.action.SEND");
sendIntent.setClassName("com.android.mms","com.android.mms.ui.ComposeMessageActivity");
在其他情况下,您可以捕获android.content.ActivityNotFoundException并使用Samsung默认的mms方式。