android7.0實現(xiàn)分享圖片到朋友圈功能
本文實例為大家分享了android實現(xiàn)分享圖片到朋友圈功能的具體代碼,供大家參考,具體內(nèi)容如下
在Android7.0中,系統(tǒng)對scheme為file://的uri進(jìn)行了限制,所以通過這種uri來進(jìn)行分享的一些接口就不能用了,比如使用代碼來調(diào)用分享朋友圈的接口。
此時就得使用其他的URI scheme來代替 file://,比如MediaStore的 content://。直接上代碼:
private static boolean checkInstallation(Context context, String packageName) { try { context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES); return true; } catch (PackageManager.NameNotFoundException e) { return false; } } public static void shareToWeChat(View view, Context context) { // TODO: 2015/12/13 將需要分享到微信的圖片準(zhǔn)備好 try { if (!checkInstallation(context, "com.tencent.mm")) { SnackBarUtil.show(view, R.string.share_no_wechat); return; } Intent intent = new Intent(); //分享精確到微信的頁面,朋友圈頁面,或者選擇好友分享頁面 ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI"); intent.setComponent(comp); intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.setType("image/*"); // intent.setType("text/plain"); //添加Uri圖片地址 // String msg=String.format(getString(R.string.share_content), getString(R.string.app_name), getLatestWeekStatistics() + ""); String msg = context.getString(R.string.share_content); intent.putExtra("Kdescription", msg); ArrayList<Uri> imageUris = new ArrayList<Uri>(); // TODO: 2016/3/8 根據(jù)不同圖片來設(shè)置分享 File dir = context.getExternalFilesDir(null); if (dir == null || dir.getAbsolutePath().equals("")) { dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()); } File pic = new File(dir, "bigbang.jpg"); pic.deleteOnExit(); BitmapDrawable bitmapDrawable; if (Build.VERSION.SDK_INT < 22) { bitmapDrawable = (BitmapDrawable) context.getResources().getDrawable(R.mipmap.bannar); } else { bitmapDrawable = (BitmapDrawable) context.getDrawable(R.mipmap.bannar); } try { bitmapDrawable.getBitmap().compress(Bitmap.CompressFormat.JPEG, 75, new FileOutputStream(pic)); } catch (FileNotFoundException e) { e.printStackTrace(); } if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { imageUris.add(Uri.fromFile(pic)); }else { //修復(fù)微信在7.0崩潰的問題 Uri uri =Uri.parse(android.provider.MediaStore.Images.Media.insertImage(context.getContentResolver(), pic.getAbsolutePath(), "bigbang.jpg", null)); imageUris.add(uri); } intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); ((Activity) context).startActivityForResult(intent, 1000); }catch (Throwable e){ SnackBarUtil.show(view,R.string.share_error); }
還有一種方式,就是FileProvider來分享文件,操作起來稍微復(fù)雜一點,大概代碼如下(代碼功能是拍照的):
String mCurrentPhotoPath; private File createImageFile() throws IOException { // Create an image file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String imageFileName = "JPEG_" + timeStamp + "_"; File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); File image = File.createTempFile( imageFileName, /* prefix */ ".jpg", /* suffix */ storageDir /* directory */ ); // Save a file: path for use with ACTION_VIEW intents mCurrentPhotoPath = "file:" + image.getAbsolutePath(); return image; } static final int REQUEST_TAKE_PHOTO = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // Ensure that there's a camera activity to handle the intent if (takePictureIntent.resolveActivity(getPackageManager()) != null) { // Create the File where the photo should go File photoFile = null; try { photoFile = createImageFile(); } catch (IOException ex) { // Error occurred while creating the File ... } // Continue only if the File was successfully created if (photoFile != null) { Uri photoURI = FileProvider.getUriForFile(this, "com.example.android.fileprovider", photoFile); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); } } }
還要在manifest中聲明這個FileProvider
<application> ... <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.android.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data> </provider> ... </application>
在res/xml/文件夾下新建文件file_paths.xml:
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="my_images" path="Android/data/com.example.package.name/files/Pictures" /> </paths>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Retrofit網(wǎng)絡(luò)請求和響應(yīng)處理重點分析講解
這篇文章主要介紹了Retrofit網(wǎng)絡(luò)請求和響應(yīng)處理重點分析,在使用?Retrofit發(fā)起網(wǎng)絡(luò)請求時,我們可以通過定義一個接口并使用Retrofit的注解來描述這個接口中的請求,Retrofit會自動生成一個實現(xiàn)該接口的代理對象2023-03-03Android開發(fā)TextvView實現(xiàn)鏤空字體效果示例代碼
這篇文章主要介紹了Android開發(fā)TextvView實現(xiàn)鏤空字體效果,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10詳解用RxJava實現(xiàn)事件總線(Event Bus)
本篇文章主要介紹了用RxJava實現(xiàn)事件總線(Event Bus),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11AndroidStudio 配置 AspectJ 環(huán)境實現(xiàn)AOP的方法
本篇文章主要介紹了AndroidStudio 配置 AspectJ 環(huán)境實現(xiàn)AOP的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02Android中ViewPager獲取當(dāng)前顯示的Fragment
這篇文章主要介紹了Android中ViewPager獲取當(dāng)前顯示的Fragment的兩種方法,一種是使用 getSupportFragmentManager().findFragmentByTag()方法,另一種是重寫適配器的 setPrimaryItem()方法,有需要的朋友可以參考借鑒,下面來一起看看吧。2017-01-01Kotlin協(xié)程之Flow基礎(chǔ)原理示例解析
這篇文章主要為大家介紹了Kotlin協(xié)程之Flow基礎(chǔ)原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09