android9.0 own application to join the list of Open and sharing system

Foreword

Following the Android7.0 version and file path Uri mutual conversion package type, for system sharing and FileProvider detailed analysis and stepped pit guidelines, and fileprovider generated Uri can not be identified  , the android talk about how their own applications into the system of open way and share the list.

 

1, show their share application list


① using the system default sharing system will be called in to share a list of applications, but how to make their own applications to join the list it? First, you need to configure AndroidManifest.xml , join in the activity below to share pages Intent Filters
 

<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>

This allows third-party applications to share filtered to share when their applications appear in the list.
② receives the content, access to relevant data in the corresponding activity in the intent

title = intent.getStringExtra(SHARE_IMG_TITLE);
(Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM)
Intent intent = getIntent();
        String action = intent.getAction();
        if (Intent.ACTION_SEND.equals(action)) {
            Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
//            Uri uri = intent.getData();
            String filename = uri.getPath();
            if (String.valueOf(uri) != null
                    && String.valueOf(uri).contains("content")) {
                boolean kkk = false;
                try{
                    filename = CommonUtils.getFilePathFromContentUri(uri,this.getContentResolver());
                    if(CommonUtils.isEmpty(filename)){
                        kkk = true;
                    }
                }catch (Exception e){
                    e.printStackTrace();
                    kkk = true;
                }
                if(kkk){
                    filename = ProviderUtils.getFPUriToPath(this,uri);
                }
            }

NOTE: CommonUtils.getFilePathFromContentUri () and ProviderUtils.getFPUriToPath () method, see the Android7.0 version and file path Uri class mutual conversion package, and implement systems sharing FileProvider detailed analysis and step guide hole, and fileprovider generated can not be recognized Uri  not repeat them here.


具体的mimeType类型有
{".3gp", "video/3gpp"},
{".apk", "application/vnd.android.package-archive"},
{".asf", "video/x-ms-asf"},
{".avi", "video/x-msvideo"},
{".bin", "application/octet-stream"},
{".bmp", "image/bmp"},
{".c", "text/plain"},
{".class", "application/octet-stream"},
{".conf", "text/plain"},
{".cpp", "text/plain"},
{".doc", "application/msword"},
{".exe", "application/octet-stream"},
{".gif", "image/gif"},
{".gtar", "application/x-gtar"},
{".gz", "application/x-gzip"},
{".h", "text/plain"},
{".htm", "text/html"},
{".html", "text/html"},
{".jar", "application/java-archive"},
{".java", "text/plain"},
{".jpeg", "image/jpeg"},
{".jpg", "image/jpeg"},
{".js", "application/x-javascript"},
{".log", "text/plain"},
{".m3u", "audio/x-mpegurl"},
{".m4a", "audio/mp4a-latm"},
{".m4b", "audio/mp4a-latm"},
{".m4p", "audio/mp4a-latm"},
{".m4u", "video/vnd.mpegurl"},
{".m4v", "video/x-m4v"},
{".mov", "video/quicktime"},
{".mp2", "audio/x-mpeg"},
{".mp3", "audio/x-mpeg"},
{".mp4", "video/mp4"},
{".mpc", "application/vnd.mpohun.certificate"},
{".mpe", "video/mpeg"},
{".mpeg", "video/mpeg"},
{".mpg", "video/mpeg"},
{".mpg4", "video/mp4"},
{".mpga", "audio/mpeg"},
{".msg", "application/vnd.ms-outlook"},
{".ogg", "audio/ogg"},
{".pdf", "application/pdf"},
{".png", "image/png"},
{".pps", "application/vnd.ms-powerpoint"},
{".ppt", "application/vnd.ms-powerpoint"},
{".prop", "text/plain"},
{".rar", "application/x-rar-compressed"},
{".rc", "text/plain"},
{".rmvb", "audio/x-pn-realaudio"},
{".rtf", "application/rtf"},
{".sh", "text/plain"},
{".tar", "application/x-tar"},
{".tgz", "application/x-compressed"},
{".txt", "text/plain"},
{".wav", "audio/x-wav"},
{".wma", "audio/x-ms-wma"},
{".wmv", "audio/x-ms-wmv"},
{".wps", "application/vnd.ms-works"},
//{".xml", "text/xml"},
{".xml", "text/plain"},
{".z", "application/x-compress"},
{".zip", "application/zip"},
{"", "/"}

2, open the way to increase their own applications


① Andrews files open in general make select Open that is open third-party applications, such as micro-channel select third-party applications to open files open, in fact, can be considered a share, the specific methods and share a similar name just filter view

<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>

② in activity in

Intent intent = getIntent();
String action = intent.getAction();
if (Intent.ACTION_VIEW.equals(action)) {
            Uri uri = intent.getData();
            String filename = uri.getPath();
            if (String.valueOf(uri) != null
                    && String.valueOf(uri).contains("content")) {
                boolean kkk = false;
                try{
                    filename = CommonUtils.getFilePathFromContentUri(uri,this.getContentResolver());
                    if(CommonUtils.isEmpty(filename)){
                        kkk = true;
                    }
                }catch (Exception e){
                    e.printStackTrace();
                    kkk = true;
                }
                if(kkk){
                    filename = ProviderUtils.getFPUriToPath(this,uri);
                }
            }

 

Guess you like

Origin blog.csdn.net/P876643136/article/details/91038276