如何使用Android的Intent.ACTION_ATTACH_DATA在Android中设置壁纸,联系人照片等

时间:2018-03-27 07:41:30

标签: android

我一直在尝试使用Android Intent.ACTION_ATTACH_DATA为不同目的设置图像,例如壁纸,联系人照片,whatsapp个人资料。我想支持Android O而不使用WallpaperManager。所以我使用FileProvider来获取我的Uri,如下所示

var sidebar = document.querySelector(".sidebar");

for (var i = 0; i <= sidebar.length; i++) {
  sidebar.addEventListener("click", function() {
    this.classList.toggle('active');
  });
}

setImageAs()如下所示;

    File imagePath = new File(this.getExternalFilesDir(null), "images");
    File newFile = new File(imagePath + File.separator + "images", "share_image" + System.currentTimeMillis() + ".jpg");
    bmpUri = FileProvider.getUriForFile(this, "com.mydomain.provider", newFile);

还设置路径并根据需要提供路径。在清单中

    Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
    intent.addCategory(Intent.CATEGORY_DEFAULT);
    intent.setData(bmpUri);
    intent.putExtra("mimeType", "image/*");
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    startActivityForResult(Intent.createChooser(intent, "Set as:"), 7575);

将res / xml文件夹中的xml文件作为

<provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.mydomain.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths" />
    </provider>

我做错了吗?如果是的话,我应该怎么做呢?我的代码适用于android api&lt; 26在引入<paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-files-path name="files" path="images/" />

之前使用Uri.fromFile(file);

1 个答案:

答案 0 :(得分:1)

最后通过将数据写入创建的文件来使其工作。这是我的最终代码。 (注意我在uri中创建了Temp图像文件)

    File imagePath=new File(this.getExternalFilesDir(null),"images");
    imagePath.mkdir();
    File newFile=new File(imagePath+File.separator+"images","share_image"+System.currentTimeMillis()+".jpg");
    newFile.createNewFile();
    FileOutputStream fileOutputStream=new FileOutputStream(dest);
    bitmap.compress(Bitmap.CompressFormat.JPEG,100,fileOutputStream);
    fileOutputStream.close();
    bmpUri=FileProvider.getUriForFile(this,"com.mydomain.provider",newFile);

请记得抓住IOExceptionFileNotFoundException