隐式意图导致应用程序崩溃

时间:2014-11-15 13:52:10

标签: android android-intent intentfilter android-pendingintent intentservice

为了了解implicit intents的工作原理,我想创建一个包含两个edittext和一个button的布局。在第一个edittext用户应该输入他的电子邮件地址,在第二个textview中,他应该输入收件人的电子邮件地址,当他点击button时,所有应该出现为Action SEND注册的组件,包括我的应用程序。

以下是我的尝试和logcat

UPDATED_JavaCode

 @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String from = et_from.getText().toString();
            String to = et_to.getText().toString();
            String data = from + to;

            Intent i = new Intent();
            i.setAction(android.content.Intent.ACTION_SEND);
            i.setType("text/plain");
            i.putExtra(android.content.Intent.EXTRA_TEXT, from + to);
            //i.setData(Uri.parse(data.toString()));
            startActivity(i);
        }
    });

UPDATED_Manifest

<uses-sdk
    android:minSdkVersion="19"
    android:targetSdkVersion="19" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".EmailActivity"
        android:label="@string/title_activity_intents_test01" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="CustomActivity"> </activity>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT"/> 
        <data android:scheme="text/plain"/>
    </intent-filter>
</application>

logcat的

11-15 14:47:19.714: E/AndroidRuntime(18239): FATAL EXCEPTION: main
11-15 14:47:19.714: E/AndroidRuntime(18239): Process: com.example.emailactivity, PID:  
18239
11-15 14:47:19.714: E/AndroidRuntime(18239): android.content.ActivityNotFoundException:   
No Activity found to handle Intent { act=android.intent.action.SEND dat=yt (has extras)    
}
11-15 14:47:19.714: E/AndroidRuntime(18239):    at  
android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1672)
11-15 14:47:19.714: E/AndroidRuntime(18239):    at   
android.app.Instrumentation.execStartActivity(Instrumentation.java:1442)
11-15 14:47:19.714: E/AndroidRuntime(18239):    at  
com.example.emailactivity.EmailActivity$1.onClick(EmailActivity.java:46)

2 个答案:

答案 0 :(得分:1)

ACTION_SEND不使用setData() - 请删除它。

另外,请使用the ACTION_SEND documentation中记录的密钥作为额外内容。请注意,没有"from"且没有"to",因此您可以删除这些额外内容。您需要提供EXTRA_TEXTEXTRA_STREAM来提供您要分享的实际内容。

答案 1 :(得分:0)

当使用隐式意图时,可能没有可以处理你的意图的应用程序(在其他问题之间,这似乎是你的问题)。为避免这种情况,在调用startActivity()之前,首先应验证系统中是否至少有一个可以处理意图的应用程序。为此,请在intent对象上使用resolveActivity():

// Verify that there are applications registered to handle this intent
// (resolveActivity returns null if none are registered)
if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
}