2017-03-02 37 views
0

我正在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); 

這裏是errorReport。

二月2日至17日:32:55.332:E/AndroidRuntime(11322):致命異常:主 二月2日至17日: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中聲明這個活動? E:/ AndroidRuntime(11322):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2187) 02-17 02:32:55.332:E/AndroidRuntime(11322):at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2237) 02-17 02:32:55.332:E/AndroidRuntime(11322):at android.app.ActivityThread.access $ 600(ActivityThread.java:146) 02- 17 02:32:55.332:E/AndroidRuntime(11322):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1239) 02-17 02:32:55.332:E/AndroidRuntime(11322):at android .os.Handler.dispatchMessage(Handler.java:99) 02-17 02:32:55.332:E/AndroidRuntime(11322):at 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:02:32:55.332:E/AndroidRuntime(11322):at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1618) 02-17 02:32:55.332:E/AndroidRuntime(11322):at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417) 02-17 02:32:55.332:E/AndroidRuntime(11322):at android.app.Activity.startActivityForResult(Activity.java:3370) 02-17 02:32:55.332:E/AndroidRuntime(11322):at android.app.Activity.startActivityForResult(Activity.java:3331) 02-17 02:32:55.332:E/AndroidRuntime(11322):at android.app。 Activity.startActivity(Activity.java:3566) 02-17 02:32:55.332:E/AndroidRuntime(11322):at android.app.Activity.startActivity(Activity.java:3534) 02-17 02:32: 55.332:E/AndroidRuntime(11322):at com.example.shareviamms.MainActivity.onCreate(Mai nActivity.java:20) 02-17 02:32:55.332:E/AndroidRuntime(11322):at 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):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2151) 02-17 02:32:55.332:E/AndroidRuntime(11322):...11更多

+0

請勿指定類名稱。無法保證該「活動」 - 甚至是該軟件包 - 將在任何給定設備上運行,就像您在這裏看到的那樣。 –

回答

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

1

你錯誤地認爲com.android.mms包必須出現在設備上(更不用說你錯過了try/catch)。所以這條線,但不保證指向有效的應用程式:

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

即使它會,然後假設ComposeMessageActivity將可供您也是錯誤的。

送東西出來的正確方法是使用SmsManager,即:

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

使用'SmsManager'是完全不同的事情,並且需要額外的權限。通過'Intent'發送沒有任何內在錯誤或不正確的。 –

+0

我無意說意圖本身是錯的。 –