У меня есть MainActivity в Android: launchMode = "singleTask"
проблема в том, что когда я получаю данные из другого приложения и мое приложение закрывается.
В этот момент я получаю Intent.ACTION_MAIN и тоже Intent.ACTION_SEND ?, я могу это проверить, потому что при сбое я использую onNewIntent (Intent i), и это нормально, но закрыто не удается.
В MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(com.faridroid.lectorygeneradorqr.R.layout.activity_main);
ButterKnife.bind(this);
setToolbar();
setTabLayoutAndViewPager();
receiveShare(getIntent(),true);
/*if(getIntent().getAction() != Intent.ACTION_MAIN){
}
*/
}
А здесь сбой, потому что getSupportFragmentManager ()
.getFragments ()
.get (FRAGMENT_SCAN_QR) выходит за границы исключения.
private boolean receiveShare(Intent intent,boolean isFromCreate) {
// Get intent, action and MIME type
String action = intent.getAction();
String type = intent.getType();
if(isFromCreate){
Log.i("Fragments ",getSupportFragmentManager().getFragments().size()+"");
}
if (action == null || type == null) {
return false;
}
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
QRGeneratorFragment fragmentGen =
(QRGeneratorFragment) getSupportFragmentManager()
.getFragments()
.get(FRAGMENT_GENERATE_QR);
viewPager.setCurrentItem(FRAGMENT_GENERATE_QR);
boolean hasQR = fragmentGen.generateQRFromText(intent.getStringExtra(Intent.EXTRA_TEXT));
if (hasQR) {
setResult(Activity.RESULT_OK);
} else {
setResult(Activity.RESULT_CANCELED);
}
return true;
} else if (type.startsWith("image/")) {
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if(imageUri != null){
QRScannerFragment fragmentScan =
(QRScannerFragment) getSupportFragmentManager()
.getFragments()
.get(FRAGMENT_SCAN_QR);
viewPager.setCurrentItem(FRAGMENT_SCAN_QR);
boolean hasQR = fragmentScan.readQRFromUri(imageUri);
if (hasQR) {
setResult(Activity.RESULT_OK);
} else {
setResult(Activity.RESULT_CANCELED);
}
}
return true;
}
}
return false;
}
Вот исключение.
com.faridroid.lectorygeneradorqr E/UncaughtException: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.faridroid.lectorygeneradorqr/com.faridroid.lectorygeneradorqr.Activities.MainActivity}: java.lang.IndexOutOfBoundsException: Index: 0
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2955)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.IndexOutOfBoundsException: Index: 0
at java.util.Collections$EmptyList.get(Collections.java:4500)
at com.faridroid.lectorygeneradorqr.Activities.MainActivity.receiveShare(MainActivity.java:99)
at com.faridroid.lectorygeneradorqr.Activities.MainActivity.onCreate(MainActivity.java:58)
at android.app.Activity.performCreate(Activity.java:7183)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
Manifest
<activity
android:name=".Activities.MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize"
android:launchMode="singleTask"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- filter for sending text or images; accepts SEND action and text or image data -->
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
<data android:mimeType="image/*"/>
</intent-filter>
</activity>