仅在Samsung Marshmallow设备中发送短信时未发现任何活动异常

时间:2017-03-02 09:14:33

标签: android

我正在研究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

2 个答案:

答案 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方式。