【问题标题】:Can't share the exact image, previous image loading while sharing through any app.Classes are here below通过任何应用程序共享时无法共享确切的图像,以前的图像加载。类在下面
【发布时间】:2018-02-01 15:18:45
【问题描述】:

当我想分享第 5 张图片但打开 WhatsApp 或其他应用程序后附有第 4 张图片时,在带有 viewpager 应用程序的图片滑块中。 这是主要问题 另一个问题是它不适用于 android 7 或更高版本,WhatsApp 附件将只显示黑色背景。

自定义幻灯片....

public class CustomSlide extends PagerAdapter{
private int[] image_resources={R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e,R.drawable.f,R.drawable.g,R.drawable.h,
        R.drawable.i,R.drawable.j,R.drawable.k,R.drawable.l,R.drawable.m,R.drawable.n,R.drawable.o,R.drawable.p,R.drawable.q,R.drawable.r,R.drawable.s,
        R.drawable.t,R.drawable.u,R.drawable.v,R.drawable.w,R.drawable.x,R.drawable.y,R.drawable.z};
private Context ctx;
private LayoutInflater layoutInflater;
public CustomSlide(Context ctx)
{this.ctx=ctx;}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    layoutInflater= (LayoutInflater) ctx.getSystemService ( Context.LAYOUT_INFLATER_SERVICE );
    View itview=layoutInflater.inflate ( R.layout.slide,container,false );
    ImageView imageView=(ImageView) itview.findViewById ( R.id.image_view );
    imageView.setImageResource ( image_resources[position] );
    container.addView ( itview );
    return itview;
}

@Override
public int getCount() {
    return image_resources.length;
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view==(LinearLayout)object;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView ( (LinearLayout) object );
}}

MainActivity....

public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
CustomSlide customSlide;
ImageView imageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate ( savedInstanceState );
    setContentView ( R.layout.activity_main );
    viewPager=(ViewPager) findViewById ( R.id.view_pager );
    customSlide=new CustomSlide ( this );
    viewPager.setAdapter ( customSlide );
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId ()){
        case R.id.Sending:
            ImageShare();
            return true;
    }
    return super.onOptionsItemSelected ( item );
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater ().inflate ( R.menu.main, menu );
    return true;
}


private void ImageShare() {
    try{
        this.imageView=(ImageView)findViewById ( R.id.image_view);
        String cachepath=getCacheDir ().getPath ();
        this.imageView.setDrawingCacheEnabled ( true );
        Bitmap viewc=Bitmap.createBitmap ( this.imageView.getDrawingCache () );
        this.imageView.setDrawingCacheEnabled ( false );
        viewc.compress ( Bitmap.CompressFormat.JPEG,100,new FileOutputStream ( new StringBuilder ( String.valueOf ( cachepath ) ).append ( "image.jpg" ).toString () ) );
        Intent share=new Intent ( Intent.ACTION_SEND );
        share.setType ( "image/*" );
        share.putExtra ( Intent.EXTRA_STREAM, Uri.fromFile (new File ( new StringBuilder ( String.valueOf ( cachepath ) ).append ( "image.jpg" ).toString ())));
        startActivity ( Intent.createChooser ( share,"Send Via" ) );
    } catch (FileNotFoundException e) {
        e.printStackTrace ( );
    }
}}

【问题讨论】:

    标签: javascript android android-viewpager share main-activity


    【解决方案1】:

    Uri.fromFile(...) 不能在牛轧糖设备中工作,而不是尝试..

    第一步:

    <manifest ...>
    <application ...>
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>
    </application>
    

    然后>>

    创建 xml 文件夹和文件

    <?xml version="1.0" encoding="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <external-pathname="external_files" path="."/>
    </paths>
    

    在编码变化中>>

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
      Uri uri=Uri.fromFile(..);
    }else{
          Uri uri= FileProvider.getUriForFile(
                                 context, 
                                 context.getApplicationContext()
                                 .getPackageName() + ".provider", file);
    
    }
    

    并尝试解决第一个问题 将 shareimage 函数放在 CustomSlide 类中并仅在其中使用 imageview。 试试这个....

    private void ImageShare() {
     try {
      String cachepath = getCacheDir().getPath();
      imageView.setDrawingCacheEnabled(true);
      Bitmap viewc = Bitmap.createBitmap(imageView.getDrawingCache());
      imageView.setDrawingCacheEnabled(false);
      viewc.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new StringBuilder(String.valueOf(cachepath)).append("image.jpg").toString()));
      Intent share = new Intent(Intent.ACTION_SEND);
      share.setType("image/*");
      share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(new StringBuilder(String.valueOf(cachepath)).append("image.jpg").toString())));
      startActivity(Intent.createChooser(share, "Send Via"));
     } catch (FileNotFoundException e) {
      e.printStackTrace();
     }
    }
    

    【讨论】:

    • 如何在customslide中加入图片分享功能?我无法修复它
    • 错误是什么??
    • 不,实际上它与错误无关,我写的与 mainactivity 中的完全相同 private void ImageShare() { this.imageView=(ImageView)findViewById (R.id.image_view);}
    • 我已经编辑了我的答案。请尝试一下,如果有任何错误,请告诉我。
    • 应用程序已停止......“this.imageView.setDrawingCacheEnabled (true);”中的错误
    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多