应用程序在使用Shareactionprovider时崩溃

时间:2013-07-14 19:53:39

标签: android android-intent android-actionbar photo

我创建了一个使用相机的应用,当用户拍照时,他会获得Shareactionprovider Api等级16 + )来分享图片......

由于用户拍摄照片后必须显示shareactionprovider,因此必须在onPrepareoptionsmenu() ...

我使用了以下代码,但应用程序崩溃.... 如果我不使用 onPrepareoptionsmenu() 应用程序正常但是我无法获得Shareactionprovider

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

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    invalidateOptionsMenu();
    getMenuInflater().inflate(R.menu.camera, menu);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        // Locate MenuItem with ShareActionProvider
        MenuItem item = menu.findItem(R.id.menu_share);
        // Fetch and store ShareActionProvider
        mShareActionProvider = (ShareActionProvider) item
                .getActionProvider();
        doShare();
        Toast.makeText(this, "prepare", Toast.LENGTH_SHORT).show();
    }
    return super.onPrepareOptionsMenu(menu);
}

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void doShare() {
    try {
        if (file.exists() && file.length() > 0) {
            // Populate the share intent with data
            Intent intent = new Intent(Intent.ACTION_SEND);
            mImageUri = Uri.fromFile(file);
            intent.setType("image/*");
            intent.putExtra(Intent.EXTRA_STREAM, mImageUri);
            mShareActionProvider.setShareIntent(intent);
        } else
            Toast.makeText(
                    this,
                    "You cancelled the image capture!!!! Please take image in order to Share",
                    Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        Toast.makeText(this, "Please take image in order to Share",
                Toast.LENGTH_SHORT).show();
    }
}

我出错了什么?

1 个答案:

答案 0 :(得分:0)

搞定了......其实我没有意识到shareactionprovider只在重新加载选项菜单后才起作用(在我的情况下按菜单键)...