Проблема при получении action_send из другого приложения в MainActivity, когда launchMode - одиночная задача - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть 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>
...