我正在尝试开始发送带有从资源中选择的图像的彩信的意图。如果我尝试从手机的存储中检索图像,此代码似乎可以正常工作,但是如果我尝试从可绘制资源中检索图像,则很难找到文件。我假设这与为获取资源而未正确创建Uri有关。
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void sendImage(View v)
{
Log.d("MainActivity", "send image button clicked");
Intent mmsIntent = new Intent(Intent.ACTION_SEND);
mmsIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("android.resource://com.example.android.imagesms/drawable/smile.jpg"));
mmsIntent.setType("image/jpg");
startActivity(mmsIntent);
}
}
如果我更换
mmsIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("android.resource://com.example.android.imagesms/drawable/smile.jpg"));
其中的代码指定了手机存储中的位置:
mmsIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File("/storage/emulated/0/DCIM/Camera/smile.jpg")));
正确检索文件,并且意图启动没有问题。
原因是,没有其他应用程序可以访问或读取您应用程序中的资产文件或可绘制文件。此类文件的范围仅限于您的应用程序。因此,您必须将所需的文件从可绘制文件夹手动写入设备的公共存储,然后激发意图。这样做是为了使该文件可用于所有其他应用程序(在您的情况下为消息应用程序)。
假设您的可绘制对象中有一个图像,即ic_launcher。然后从该图像中获取一个位图对象,例如:
Bitmap bm = BitmapFactory.decodeResource( getResources(), R.drawable.ic_launcher);
可以使用以下方法检索SD卡的路径:
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
然后单击以下按钮保存到sdcard:
File file = new File(extStorageDirectory, "ic_launcher.PNG");
outStream = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
不要忘记添加android.permission.WRITE_EXTERNAL_STORAGE
权限。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句