اذهب إلى المحتوى
  • 0

كيفية مشاركة صورة من خلال ACTION_SEND الى تطبيقات اخرى

Flutter Dev

السؤال

السلام عليكم ورحمة الله وبركاته

تحيه طيبه للجميع

لدي استفسار لو تكرمتو .. لدي الكود التالي لمشاركة الصور من تطبيقي الى تطبيق الواتساب على سبيل المثال :

    // Share image
    private void shareImage( ) {
        Intent sharingIntent = new Intent(Intent.ACTION_SEND);
        sharingIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        sharingIntent.setType("image/*");
        sharingIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
        startActivity(Intent.createChooser(sharingIntent, "Share Image Using"));
    }

ولكن لدي مشكلة كالتالي:

انا استخدم هذا الكود في activity تم جلب الصور فيه من خلال Intent الكود التالي :

  final String imurl = i.getStringExtra("Image");

واقوم بعرضها من خلال مكتبة البيكاسو :

  Picasso.get().load(imurl).into(imageviews);

سوالي الان لو ارغب بمشاركة هذا الصورة المعروضه الى الان تطبيق الواتساب مثلا كيف ممكن اعدل على كود مشاركة الصور الذي سبق وقمت بادراجه في اول السوال ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

وعليكم السلام أخي @مروان مروان3

أتوقع يمكنك عمل التعديل على الفنكشن وتمرير متغير الصورة imurl إلى ال intent أي هكذا

 

 // Share image
    private void shareImage( ) {
        Intent sharingIntent = new Intent(Intent.ACTION_SEND);
        sharingIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        sharingIntent.setType("image/*");
        sharingIntent.putExtra(Intent.EXTRA_STREAM, imurl);
        startActivity(Intent.createChooser(sharingIntent, "Share Image Using"));
    }

هذه الجزء تحديداً 

sharingIntent.putExtra(Intent.EXTRA_STREAM, imurl);

لاحظ imurl 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 دقائق مضت قال Mohamd Imran:

وعليكم السلام أخي @مروان مروان3

أتوقع يمكنك عمل التعديل على الفنكشن وتمرير متغير الصورة imurl إلى ال intent أي هكذا

 


 // Share image
    private void shareImage( ) {
        Intent sharingIntent = new Intent(Intent.ACTION_SEND);
        sharingIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        sharingIntent.setType("image/*");
        sharingIntent.putExtra(Intent.EXTRA_STREAM, imurl);
        startActivity(Intent.createChooser(sharingIntent, "Share Image Using"));
    }

هذه الجزء تحديداً 


sharingIntent.putExtra(Intent.EXTRA_STREAM, imurl);

لاحظ imurl 

لم ينفع ذلك عزيزي جربت ذلك سابقا

والخطا كان كالتالي:

String failed,please try agein

 

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 دقائق مضت قال مروان مروان3:

لم ينفع ذلك عزيزي جربت ذلك سابقا

تمام  ,أتوقع إنك تريد مشاركة الصورة من ال imageView إن كان كذلك فقط عدل الفنكشن إلى التالي 

// Share image
    private void shareImage( ) { 
BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageView.getDrawable());
      Bitmap myimg = bitmapDrawable .getBitmap();
      String bitmapPath = Images.Media.insertImage(getContentResolver(), myimg,"some 
      title", null);
      Uri bitmapUri = Uri.parse(bitmapPath);
      Intent shareIntent=new Intent(Intent.ACTION_SEND);
      shareIntent.setType("image/*");
      shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
      startActivity(Intent.createChooser(shareIntent,"Share Image"));
                                                   
                                                   }

هكذا سيتم مشاركة الصورة من ال imageView ,أعلمني بالنتيجة 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 دقائق مضت قال Mohamd Imran:

تمام  ,أتوقع إنك تريد مشاركة الصورة من ال imageView إن كان كذلك فقط عدل الفنكشن إلى التالي 


// Share image
    private void shareImage( ) { 
BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageView.getDrawable());
      Bitmap myimg = bitmapDrawable .getBitmap();
      String bitmapPath = Images.Media.insertImage(getContentResolver(), myimg,"some 
      title", null);
      Uri bitmapUri = Uri.parse(bitmapPath);
      Intent shareIntent=new Intent(Intent.ACTION_SEND);
      shareIntent.setType("image/*");
      shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
      startActivity(Intent.createChooser(shareIntent,"Share Image"));
                                                   
                                                   }

هكذا سيتم مشاركة الصورة من ال imageView ,أعلمني بالنتيجة 

يحدث الاكراش التالي اخي:

    Process: com.example.myapplication, PID: 8410
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()' on a null object reference
        at com.example.myapplication.Fragmantmarket.ViewOrders.shareImage(ViewOrders.java:259)
        at com.example.myapplication.Fragmantmarket.ViewOrders.onCreateView(ViewOrders.java:251)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
        at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947)
        at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1818)
        at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:303)
        at androidx.fragment.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:246)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
        at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
        at android.view.View.measure(View.java:21051)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
        at android.view.View.measure(View.java:21051)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
        at android.view.View.measure(View.java:21051)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
        at android.view.View.measure(View.java:21051)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at android.view.View.measure(View.java:21051)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
        at android.view.View.measure(View.java:21051)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:853)
        at android.view.View.measure(View.java:21051)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2583)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1642)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1893)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1522)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7098)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:927)
        at android.view.Choreographer.doCallbacks(Choreographer.java:702)
2020-07-01 23:35:28.035 8410-8410/com.example.myapplication E/AndroidRuntime:     at android.view.Choreographer.doFrame(Choreographer.java:638)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:913)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6682)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 دقائق مضت قال مروان مروان3:

يحدث الاكراش التالي اخي:



 

تأكد من تحميل الصورة  في الفيو قبل إستدعاء الفنكشن 

مثال 

  Picasso.get().load(imurl).into(imageviews);

وأيضا إسم الفيو لديك هو imageviews لذلك عدل ذلك في الفنكشن إلى التالي 

// Share image
    private void shareImage( ) { 
BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageviews.getDrawable());
      Bitmap myimg = bitmapDrawable .getBitmap();
      String bitmapPath = Images.Media.insertImage(getContentResolver(), myimg,"some 
      title", null);
      Uri bitmapUri = Uri.parse(bitmapPath);
      Intent shareIntent=new Intent(Intent.ACTION_SEND);
      shareIntent.setType("image/*");
      shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
      startActivity(Intent.createChooser(shareIntent,"Share Image"));
                                                   
                                                   }

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 6 دقائق مضت قال Mohamd Imran:

تأكد من تحميل الصورة  في الفيو قبل إستدعاء الفنكشن 

مثال 


  Picasso.get().load(imurl).into(imageviews);

وأيضا إسم الفيو لديك هو imageviews لذلك عدل ذلك في الفنكشن إلى التالي 


// Share image
    private void shareImage( ) { 
BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageviews.getDrawable());
      Bitmap myimg = bitmapDrawable .getBitmap();
      String bitmapPath = Images.Media.insertImage(getContentResolver(), myimg,"some 
      title", null);
      Uri bitmapUri = Uri.parse(bitmapPath);
      Intent shareIntent=new Intent(Intent.ACTION_SEND);
      shareIntent.setType("image/*");
      shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
      startActivity(Intent.createChooser(shareIntent,"Share Image"));
                                                   
                                                   }

 

هذا النتيجة اخي الكراش التالي:

2020-07-01 23:46:58.318 13563-13563/com.example.myapplication E/MediaStore: Failed to insert image
    java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=13563, uid=10315 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
        at android.os.Parcel.readException(Parcel.java:1693)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
        at android.content.ContentProviderProxy.insert(ContentProviderNative.java:476)
        at android.content.ContentResolver.insert(ContentResolver.java:1280)
        at android.provider.MediaStore$Images$Media.insertImage(MediaStore.java:1025)
        at com.example.myapplication.Fragmantmarket.ViewOrders.shareImage(ViewOrders.java:266)
        at com.example.myapplication.Fragmantmarket.ViewOrders.access$200(ViewOrders.java:65)
        at com.example.myapplication.Fragmantmarket.ViewOrders$5.onClick(ViewOrders.java:253)
        at android.view.View.performClick(View.java:6205)
        at android.widget.TextView.performClick(TextView.java:11103)
        at android.view.View$PerformClick.run(View.java:23653)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6682)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
2020-07-01 23:46:58.319 13563-13563/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 13563
    java.lang.NullPointerException: uriString
        at android.net.Uri$StringUri.<init>(Uri.java:475)
        at android.net.Uri$StringUri.<init>(Uri.java)
        at android.net.Uri.parse(Uri.java:437)
        at com.example.myapplication.Fragmantmarket.ViewOrders.shareImage(ViewOrders.java:267)
        at com.example.myapplication.Fragmantmarket.ViewOrders.access$200(ViewOrders.java:65)
        at com.example.myapplication.Fragmantmarket.ViewOrders$5.onClick(ViewOrders.java:253)
        at android.view.View.performClick(View.java:6205)
        at android.widget.TextView.performClick(TextView.java:11103)
        at android.view.View$PerformClick.run(View.java:23653)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6682)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

بنسبه لمسميات imageviews لا باس بالاختلاف لني اجرب على مشروعين حتى ارء النتيجة مشروع مفصل صغير حتى لا اتوه بالمشروع الكامل

وبنسبه لتحميل هذا الكراش الان والتحميل مكتمل 

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 دقيقة مضت قال مروان مروان3:

وبنسبه لتحميل هذا الكراش الان والتحميل مكتمل 

سبب الخطأ هو يخبرك بأنه يحتاج إلى ال permission لتخزين الصورة قم بإعطاءه ذلك أما من خلال الدخول على التطبيق من الجوال من خلال التطبيقات ثم الصلاحيات أو ما شابه ,أو قم بإضافة ال permssion المطلوب في ملف mainfest وهو هذا

 

android.permission.WRITE_EXTERNAL_STORAGE

ثم قم بالتجربة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 دقائق مضت قال Mohamd Imran:

سبب الخطأ هو يخبرك بأنه يحتاج إلى ال permission لتخزين الصورة قم بإعطاءه ذلك أما من خلال الدخول على التطبيق من الجوال من خلال التطبيقات ثم الصلاحيات أو ما شابه ,أو قم بإضافة ال permssion المطلوب في ملف mainfest وهو هذا

 


android.permission.WRITE_EXTERNAL_STORAGE

ثم قم بالتجربة

device-2020.thumb.png.c20d8a5175339b790ebe6e2138aabc20.png

 

اذا قصدك هذا الصلاحيه ف انا مفعلها ولكن يظهر لي نفس لكراش وبنسبه ل ملف المينفاست انا عامل ادراج ل صلاحيه ايضا بيه 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 15 دقائق مضت قال مروان مروان3:

اذا قصدك هذا الصلاحيه ف انا مفعلها ولكن يظهر لي نفس لكراش وبنسبه ل ملف المينفاست انا عامل ادراج ل صلاحيه ايضا بيه 

جرب إغلاق التطبيق تماماً ,وقم بتشغيله مرة أخرى في حال لم ينفع ,ما هو إصدار الminSDK لديك في ملف ال mainfest

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ الآن قال Mohamd Imran:

جرب إغلاق التطبيق تماماً ,وقم بتشغيله مرة أخرى في حال لم ينفع ,ما هو إصدار الminSDK لديك في ملف ال mainfest

بنسبه ل صلاحيات mainfest 

android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />

اما لجريدل 

    compileSdkVersion 28
        minSdkVersion 16

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 7 دقائق مضت قال مروان مروان3:

بنسبه ل صلاحيات mainfest 



 

تمام قم بإضافة الصلاحيات من خلال ال intent في الفنكشن هكذا 

// Share image
    private void shareImage( ) { 
BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageviews.getDrawable());
      Bitmap myimg = bitmapDrawable .getBitmap();
      String bitmapPath = Images.Media.insertImage(getContentResolver(), myimg,"some 
      title", null);
      Uri bitmapUri = Uri.parse(bitmapPath);
      Intent shareIntent=new Intent(Intent.ACTION_SEND);
      shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
      shareIntent.setType("image/*");
      shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
      startActivity(Intent.createChooser(shareIntent,"Share Image"));
                                                   
                                                   }

لاحظ 

shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 دقائق مضت قال Mohamd Imran:

تمام قم بإضافة الصلاحيات من خلال ال intent في الفنكشن هكذا 


// Share image
    private void shareImage( ) { 
BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageviews.getDrawable());
      Bitmap myimg = bitmapDrawable .getBitmap();
      String bitmapPath = Images.Media.insertImage(getContentResolver(), myimg,"some 
      title", null);
      Uri bitmapUri = Uri.parse(bitmapPath);
      Intent shareIntent=new Intent(Intent.ACTION_SEND);
      shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
      shareIntent.setType("image/*");
      shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
      startActivity(Intent.createChooser(shareIntent,"Share Image"));
                                                   
                                                   }

لاحظ 


shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

 

نفس المشكلة عزيزي

الكراش كالتالي:

2020-07-02 00:31:48.100 26184-26184/com.example.myapplication E/MediaStore: Failed to insert image
    java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=26184, uid=10315 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
   

هذا شكل الكود كامل لدي الان :

    private void shareImage( ) {

            BitmapDrawable bitmapDrawable = ((BitmapDrawable) prImg.getDrawable());
            Bitmap myimg = bitmapDrawable .getBitmap();
            String bitmapPath = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), myimg,"some title", null);
                    Uri bitmapUri = Uri.parse(bitmapPath);
            Intent shareIntent=new Intent(Intent.ACTION_SEND);
            shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            shareIntent.setType("image/*");
            shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
            startActivity(Intent.createChooser(shareIntent,"Share Image"));

    }

 

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 8 دقائق مضت قال مروان مروان3:

هذا شكل الكود كامل لدي الان :



 

هذه مشكلة نظام أندرويد (إختلاف طريقة الحصول على صلاحية تخزين الملفات)أو بالتحديد من ال SDK قم بإضافة الميثود التالية فوق الفنكشنshareImage  الخاص بنا

public  void grantPermissions(Context context, Intent intent, Uri uri, boolean writeAble) {

    int flag = Intent.FLAG_GRANT_READ_URI_PERMISSION;
    if (writeAble) {
        flag |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
    }
    intent.addFlags(flag);
    List<ResolveInfo> resInfoList = context.getPackageManager()
            .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    for (ResolveInfo resolveInfo : resInfoList) {
        String packageName = resolveInfo.activityInfo.packageName;
        context.grantUriPermission(packageName, uri, flag);
    }
}

ثم نقوم بإضافتها في الفنكشن هكذا 

// Share image
    private void shareImage( ) { 
BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageviews.getDrawable());
      Bitmap myimg = bitmapDrawable .getBitmap();
      String bitmapPath = Images.Media.insertImage(getContentResolver(), myimg,"some 
      title", null);
      Uri bitmapUri = Uri.parse(bitmapPath);
      Intent shareIntent=new Intent(Intent.ACTION_SEND);
      grantPermissions(this,shareIntent,bitmapUri,true);
      shareIntent.setType("image/*");
      shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
      startActivity(Intent.createChooser(shareIntent,"Share Image"));
                                                   
                                                   }

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 دقائق مضت قال Mohamd Imran:

هذه مشكلة نظام أندرويد أو بالتحديد من ال SDK قم بإضافة الميثود التالية فوق الفنكشنshareImage  الخاص بنا


public  void grantPermissions(Context context, Intent intent, Uri uri, boolean writeAble) {

    int flag = Intent.FLAG_GRANT_READ_URI_PERMISSION;
    if (writeAble) {
        flag |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
    }
    intent.addFlags(flag);
    List<ResolveInfo> resInfoList = context.getPackageManager()
            .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    for (ResolveInfo resolveInfo : resInfoList) {
        String packageName = resolveInfo.activityInfo.packageName;
        context.grantUriPermission(packageName, uri, flag);
    }
}

ثم نقوم بإضافتها في الفنكشن هكذا 


// Share image
    private void shareImage( ) { 
BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageviews.getDrawable());
      Bitmap myimg = bitmapDrawable .getBitmap();
      String bitmapPath = Images.Media.insertImage(getContentResolver(), myimg,"some 
      title", null);
      Uri bitmapUri = Uri.parse(bitmapPath);
      Intent shareIntent=new Intent(Intent.ACTION_SEND);
      grantPermissions(this,shareIntent,bitmapUri,true);
      shareIntent.setType("image/*");
      shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
      startActivity(Intent.createChooser(shareIntent,"Share Image"));
                                                   
                                                   }

 

لا تزال المشكلة مستمره غريبه صراحه الامر

الكود كامل الان كالتالي :مع العلم اني استخدم الكود في Fragment


shareImage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
            shareImage();
    }
});


        return rootView;
    }
    public  void grantPermissions(Context context, Intent intent, Uri uri, boolean writeAble) {

        int flag = Intent.FLAG_GRANT_READ_URI_PERMISSION;
        if (writeAble) {
            flag |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
        }
        intent.addFlags(flag);
        List<ResolveInfo> resInfoList = context.getPackageManager()
                .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        for (ResolveInfo resolveInfo : resInfoList) {
            String packageName = resolveInfo.activityInfo.packageName;
            context.grantUriPermission(packageName, uri, flag);
        }
    }

    private void shareImage( ) {

        BitmapDrawable bitmapDrawable = ((BitmapDrawable) prImg.getDrawable());
        Bitmap myimg = bitmapDrawable .getBitmap();
        String bitmapPath = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), myimg,"some title", null);
                Uri bitmapUri = Uri.parse(bitmapPath);
        Intent shareIntent=new Intent(Intent.ACTION_SEND);
        grantPermissions(getContext(),shareIntent,bitmapUri,true);
        shareIntent.setType("image/*");
        shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
        startActivity(Intent.createChooser(shareIntent,"Share Image"));

    }

 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 دقائق مضت قال مروان مروان3:

لا تزال المشكلة مستمره غريبه صراحه الامر

 

سبب المشكلة هو من الهاتف الذي تقوم بتشغيل التطبيق عليه يملك إصدار أندرويد عالي مثل ٩ او ١٠ ,الخ.. وفي هذه الإصدارات يجب الحصول على الصلاحيات من التطبيق الذي تريد المشاركة علية أقصد في حالتك هو الواتس أب يوجد خيارات أول واحد هو حاول تجربة التطبيق على جهاز ذو إصدار أندرويد منخفض مثل ٥ أو ٦ الخيار الثاني هو جرب إضافة إسم الباكيج الخاص بالواتس أب إلى الفنشكن هكذا بشكل يدوي

 private void shareImage( ) {

        BitmapDrawable bitmapDrawable = ((BitmapDrawable) prImg.getDrawable());
        Bitmap myimg = bitmapDrawable .getBitmap();
        String bitmapPath = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), myimg,"some title", null);
                Uri bitmapUri = Uri.parse(bitmapPath);
        Intent shareIntent=new Intent(Intent.ACTION_SEND);
  		 String packageName = "com.whatsapp";
        this.grantUriPermission(packageName,bitmapUri,Intent.FLAG_GRANT_READ_URI_PERMISSION);
        shareIntent.setType("image/*");
        shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
        startActivity(Intent.createChooser(shareIntent,"Share Image"));

    }

وقم بالتجربة مرة أخرى إن لم ينفع أيضاً ,تفقد صلاحيات الواتس أب 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 6 دقائق مضت قال Mohamd Imran:

سبب المشكلة هو من الهاتف الذي تقوم بتشغيل التطبيق عليه يملك إصدار أندرويد عالي مثل ٩ او ١٠ ,الخ.. وفي هذه الإصدارات يجب الحصول على الصلاحيات من التطبيق الذي تريد المشاركة علية أقصد في حالتك هو الواتس أب يوجد خيارات أول واحد هو حاول تجربة التطبيق على جهاز ذو إصدار أندرويد منخفض مثل ٥ أو ٦ الخيار الثاني هو جرب إضافة إسم الباكيج الخاص بالواتس أب إلى الفنشكن هكذا بشكل يدوي


 private void shareImage( ) {

        BitmapDrawable bitmapDrawable = ((BitmapDrawable) prImg.getDrawable());
        Bitmap myimg = bitmapDrawable .getBitmap();
        String bitmapPath = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), myimg,"some title", null);
                Uri bitmapUri = Uri.parse(bitmapPath);
        Intent shareIntent=new Intent(Intent.ACTION_SEND);
  		 String packageName = "com.whatsapp";
        this.grantUriPermission(packageName,bitmapUri,Intent.FLAG_GRANT_READ_URI_PERMISSION);
        shareIntent.setType("image/*");
        shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
        startActivity(Intent.createChooser(shareIntent,"Share Image"));

    }

وقم بالتجربة مرة أخرى إن لم ينفع أيضاً ,تفقد صلاحيات الواتس أب 

 

 

العذر وسموحه اخي تعبتك معي

بنسبه ل اصدار نظام التشغيل هو 7.0 الذي اقوم بالاختبار عليه ليس جديد

وبنسبه ل اضافة باكينج واتساب المشكلة تحدث بمجرد ان اضغط على زر المشاركة يعني شاشة اختيار التطبيقات التي سوف اشارك الصوره معها لا تظهر بالاساس الكرش يحدث قبل ذلك

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 دقائق مضت قال مروان مروان3:

وبنسبه ل اضافة باكينج واتساب المشكلة تحدث بمجرد ان اضغط على زر المشاركة يعني شاشة اختيار التطبيقات التي سوف اشارك الصوره معها لا تظهر بالاساس الكرش يحدث قبل ذلك

ولا يهمك أخي ,هل يمكنك مشاركة ملف التطبيق كامل ,حتى أتفحصه ربما سبب المشكلة خطأ في مكان أخر 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 دقائق مضت قال Mohamd Imran:

ولا يهمك أخي ,هل يمكنك مشاركة ملف التطبيق كامل ,حتى أتفحصه ربما سبب المشكلة خطأ في مكان أخر 

تم اخي دقائق فقط

رح اعمل نسخه مصغره من المشروع وارفقها

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...