我创建了一个recyclerview来显示卡片视图。它们包含我已设置到Raw目录中的GIF。效果很好。
现在 我正在尝试根据所选的itemview设置手机的墙纸。 这里的问题是,我正在使用的WallpaperManager试图询问资源路径,但是我希望根据所选的itemview进行设置。这是片段-
public MyViewHolder(final View itemView) {
super(itemView);
this.textViewName = itemView.findViewById(R.id.textViewName);
this.textViewVersion = itemView.findViewById(R.id.textViewVersion);
this.gifView = itemView.findViewById(R.id.gifView);
this.fileName = itemView.findViewById(R.id.fileName);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(itemView.getContext(), "You Chose " + textViewName.getText().toString(), Toast.LENGTH_SHORT).show();
int resID = itemView.getResources().getIdentifier(fileName.getText().toString(),
"raw", itemView.getContext().getPackageName());
Log.i(TAG, String.valueOf(resID));
WallpaperManager myWallpaperManager = WallpaperManager.getInstance(itemView.getContext());
try {
myWallpaperManager.setResource(resID);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
您将看到我尝试根据我在视图中设置的(不可见)文本视图设置resID。只是尝试一下,但它仍然为我提供了错误-
android.content.res.Resources$NotFoundException: Unable to find resource ID #0x0
at android.content.res.ResourcesImpl.getResourceName(ResourcesImpl.java:255)
at android.content.res.Resources.getResourceName(Resources.java:1954)
at android.app.WallpaperManager.setResource(WallpaperManager.java:1155)
at android.app.WallpaperManager.setResource(WallpaperManager.java:1125)
at com.example.erickrusznis.live.CustomAdapter$MyViewHolder$1.onClick(CustomAdapter.java:54)
因此,它似乎一直在不断给我资源的ID,而不是实际路径。 关于如何根据位置获取文件原始路径的任何建议都将非常有用!谢谢!
编辑- 我也尝试过此操作,但是它说它需要一个'int'而不是uri-
Uri uri = Uri.parse("android.resource://"+itemView.getContext().getPackageName()+"/raw/"+fileName.getText().toString());
WallpaperManager wpm = WallpaperManager.getInstance(itemView.getContext());
wpm.setResource(uri);