0

implicit intents의 작동 방식을 이해하기 위해 edittext과 하나의 button으로 레이아웃을 만들고 싶습니다. 첫 번째 edittext에서 사용자는 이메일 주소를 입력해야하고 두 번째 textview에는 수신자의 이메일 주소를 입력해야하며 button을 클릭하면 ActionSEND에 등록 된 모든 구성 요소가 내 앱을 포함하여 표시됩니다.암시 적 의도로 인해 앱이 손상됩니다.

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) 

답변

1

ACTION_SENDsetData()은 사용하지 마십시오.

또한 추가 항목에 the ACTION_SEND documentation에 설명 된 키를 사용하십시오. "from"이없고 "to"이 없으므로 해당 추가 기능을 제거 할 수 있습니다. 공유하고있는 실제 콘텐츠를 제공하려면 EXTRA_TEXT 또는 EXTRA_STREAM을 제공해야합니다.

+0

답을 고맙습니다. setData()를 제거했습니다. 이제는 두 가지가 있습니다 : 1 - i는 edittext (와 t)에 주어진 두 값을 전달해야합니다. i.putExtra (android.content.Intent.EXTRA_TEXT, from)와'i.putExtra android.content.Intent.EXTRA_TEXT, to); 이거? 2 - 등록 된 구성 요소 중에 내 앱이 나열되어 있지 않습니다. – user2121

+1

@ user2121 : * 값 하나를 'EXTRA_TEXT'에 채울 수 있습니다. 또한'Intent'에'setType()'을 추가하여'EXTRA_TEXT'에있는 내용의 MIME 유형을 나타낼 필요가 있습니다. 그런 다음''에 대응하는''요소가 있어야만 해당 MIME 유형과 일치해야합니다. – CommonsWare

+0

친절하게도 업데이트 된 코드 및 매니페스트를 참조하십시오. 앱이 아직 등록 된 구성 요소로 표시되지 않습니다. – user2121

0

암시 적 인 텐트를 사용할 때 의도를 처리 할 수있는 응용 프로그램이 없을 수도 있습니다 (다른 문제와의 사이에 문제가있는 것 같습니다). 이것을 피하려면 startActivity()를 호출하기 전에 먼저 인 텐트를 처리 할 수있는 시스템에 등록 된 하나 이상의 응용 프로그램이 있는지 확인해야합니다. 이렇게하려면 의도 객체에서 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); 
}