On Android API 19 (4.4) the intent.createChooser method causes IntentServiceLeak

后端 未结 2 608
醉酒成梦
醉酒成梦 2021-01-12 09:33

Running my app on the new Android KitKat device (API 19, 4.4) I get \"Copied to Clipboard\" everytime I try to create an Intent chooser. This is happening on Youtube, Tumbl

相关标签:
2条回答
  • 2021-01-12 09:59

    @clu Has the answer right, just backwards lol. It should be this:

    //Create the intent to share and set extras
    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
    sendIntent.putExtra(Intent.EXTRA_TEXT, message);
    sendIntent.setType("text/plain");
    
    //Check if device API is LESS than KitKat
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT)
        context.startActivity(sendIntent);
    else
        context.startActivity(Intent.createChooser(sendIntent, "Share"));
    

    This build check can be shortened to a one-liner as well:

    //Create the intent to share and set extras
    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
    sendIntent.putExtra(Intent.EXTRA_TEXT, message);
    sendIntent.setType("text/plain");
    
    //Check if device API is LESS than KitKat
    startActivity(Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT ? sendIntent : intent.createChooser(sendIntent, "Share"));
    
    0 讨论(0)
  • Here's my workaround solution for this issue. I first detect if the device is running on KIT_KAT or higher, and instead of creating a chooser, I simply try to start the intent. This will cause Android to ask the user which application they want to complete the action with (unless the user already has a default for all ACTION_SEND intents.

    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
    sendIntent.putExtra(Intent.EXTRA_TEXT, message);
    sendIntent.setType("text/plain");
    
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        // This will open the "Complete action with" dialog if the user doesn't have a default app set.
        context.startActivity(sendIntent);
    } else {
        context.startActivity(Intent.createChooser(sendIntent, "Share Via"));
    }
    
    0 讨论(0)
提交回复
热议问题