【问题标题】:No activity found exception when send sms only in Samsung Marshmallow devices仅在三星棉花糖设备中发送短信时未发现异常
【发布时间】:2017-03-02 09:14:32
【问题描述】:

我正在开发 Android 应用程序,在该应用程序中我需要使用意图发送带有图像的短信,但我收到异常 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);

这是错误报告。

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: 无法查找显式活动类 {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): 在 java.lang.reflect.Method.invokeNative(Native Method) 02-17 02:32:55.332: E/AndroidRuntime(11322): 在 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): 在 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 更多

【问题讨论】:

  • 不要指定类名。正如您在此处看到的那样,无法保证 Activity - 甚至该软件包 - 会出现在任何给定的设备上。

标签: android


【解决方案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 并使用三星默认的 mms 方式。

【讨论】:

    【解决方案2】:

    您错误地认为设备上必须存在com.android.mms 包(更不用说您错过了try/catch)。所以这条线不能保证指向有效的应用程序:

    sendIntent.setClassName("com.android.mms","com.android.mms.ui.ComposeMessageActivity");
    

    即使它会,那么假设ComposeMessageActivity 对你可用也是错误的。

    正确的发送方式是使用SmsManager,即:

    SmsManager sms=SmsManager.getDefault();  
    sms.sendTextMessage(...)
    

    【讨论】:

    • 使用SmsManager 是完全不同的事情,需要额外的许可。通过Intent 发送本身并没有任何错误或不当之处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2016-04-03
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多