2

Share Intent をコードに実装する方法がまったくわかりません。誰かが私を助けてくれますか? コードコード全体を書き直す必要がありますか? 共有インテントに AsyncTask を使用しています。共有インテントを使用して画像を共有したいと思います。以下のコードを確認してください。

ShareImageTask.class

    public class ShareImageTask extends AsyncTask<String , String , String>
{
    private Context context;
    private ProgressDialog pDialog;
    String image_url;
    URL myFileUrl;
    String myFileUrl1;
    Bitmap bmImg = null;
    Intent share;


    public ShareImageTask(Context context) {
        this.context = context;
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub

        super.onPreExecute();

        pDialog = new ProgressDialog(context);
        pDialog.setMessage("Downloading Image ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();

    }

    @Override
    protected String doInBackground(String... args) {
        // TODO Auto-generated method stub

        try {  

            myFileUrl = new URL(args[0]);
            HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();   
            conn.setDoInput(true);   
            conn.connect();     
            InputStream is = conn.getInputStream();
            bmImg = BitmapFactory.decodeStream(is); 
        }
        catch (IOException e)
        {       
            e.printStackTrace();  
        }
        try {       

            String path = myFileUrl.getPath();
            String idStr = path.substring(path.lastIndexOf('/') + 1);
        File filepath = Environment.getExternalStorageDirectory();
        File dir = new File (filepath.getAbsolutePath() + "/Wallpaper/");
            dir.mkdirs();
            String fileName = idStr;
            File file = new File(dir, fileName);
            FileOutputStream fos = new FileOutputStream(file);
            bmImg.compress(CompressFormat.JPEG, 75, fos);   
            fos.flush();    
            fos.close();     
            share = new Intent(Intent.ACTION_SEND);
            share.setType("image/jpeg");

            share.putExtra(Intent.EXTRA_STREAM,file);

            context.startActivity(Intent.createChooser(share, "Share Image")); 
        }
        catch (Exception e)
                {
                    e.printStackTrace();  
                }




        return null;   
    }

    @Override
    protected void onPostExecute(String args) {
        // TODO Auto-generated method stub
                pDialog.dismiss();

    }


}
4

3 に答える 3

5

これを使って:

context.startActivity(Intent.createChooser(share, "Share Image"));

したがって、AsyncTask 自体ではなく、AsyncTask 内のアクティビティのコンテキストを指します。今、メソッドを呼び出していますAsyncTask::startActivity()が、それは存在しません。あなたは内部クラスにいるので、呼び出したいオブジェクトが必要ですstartActivity()。それcontextが設定した変数です。

于 2012-08-18T17:36:12.400 に答える
1

onPostExecute (UI スレッドで実行される) の Activity インスタンスから startActivity(Intent) を呼び出す必要があります。

class MyActivity {
  public class ShareImageTask extends AsyncTask<String , String , String> {
      . . .
    @Override
    protected String doInBackground(String... args) {
        . . . 
        return file;
    }

    @Override
    protected void onPostExecute(String args) {
        // TODO Auto-generated method stub
        pDialog.dismiss();
        share = new Intent(Intent.ACTION_SEND);
        share.setType("image/jpeg");

        share.putExtra(Intent.EXTRA_STREAM, file[0]);

        startActivity(Intent.createChooser(share, "Share Image")); //<<--The 

    }

  }
}
于 2012-08-18T17:39:44.993 に答える
0

Android デベロッパー ブログには、インテントを使用したコンテンツの共有に関する記事があります: http://android-developers.blogspot.com/2012/02/share-with-intents.html

于 2012-08-18T18:18:28.043 に答える