我这样做是通过将一个首选项放入Settings xml中(我的是flash_setting.xml);

android:key="image_custom"

android:title="Choose Background"

android:summary="Select a Custom Image"

/>

我创建了一个自定义类来获取OnPreferenceClick侦听器并监视用户单击首选项(这是调用mySettings.java)(请注意,getRealPathFromURI例程不是我的,并且在此处的其他位置找到);

您的类应首先扩展PreferenceActivity并实现Sharedpreference更改侦听器

public class flashSettings extends PreferenceActivityimplements SharedPreferences.OnSharedPreferenceChangeListener {

链接到首选项名称并注册侦听器

@Override

protected void onCreate(Bundle icicle) {

super.onCreate(icicle);

getPreferenceManager().setSharedPreferencesName(

fingerflashpro.SHARED_PREFS_NAME);

addPreferencesFromResource(R.xml.flash_settings); getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(

this);

接下来,我们将设置on首选项侦听器以侦听“image_custom”.单击它时,我们将启动一个新的意图来显示照片选择器.我们从StartActivityForResult开始,这样我们就可以从intent中获取图像的URI.

getPreferenceManager().findPreference("image_custom").setOnPreferenceClickListener(new OnPreferenceClickListener()

{

@Override

public boolean onPreferenceClick(Preference preference)

{

Display display = getWindowManager().getDefaultDisplay();

int width = display.getWidth();

int height = display.getHeight();

Toast.makeText(getBaseContext(), "Select Image - " + (width) + " x " + height , Toast.LENGTH_LONG).show();

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);

photoPickerIntent.setType("image/*");

startActivityForResult(photoPickerIntent, 1);

return true;

}

});}

接下来,我们等待活动返回结果,并将URI解析为实际路径.

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 1) {

if (resultCode == Activity.RESULT_OK) {

Uri selectedImage = data.getData();

String RealPath;

SharedPreferences customSharedPreference = getSharedPreferences(fingerflashpro.SHARED_PREFS_NAME, Context.MODE_PRIVATE);

SharedPreferences.Editor editor = customSharedPreference.edit ();

RealPath = getRealPathFromURI (selectedImage);

editor.putString("image_custom", RealPath);

editor.commit();

}}

在这个网站上找到了以下代码(由PercyPercy在this thread上发现),我只是为了完整性而包含它.然而,它确实完美.

public String getRealPathFromURI(Uri contentUri) {

String [] proj={MediaColumns.DATA};

Cursor cursor = managedQuery( contentUri,

proj, // Which columns to return

null, // WHERE clause; which rows to return (all rows)

null, // WHERE clause selection arguments (none)

null); // Order-by clause (ascending by name)

int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);

cursor.moveToFirst();

return cursor.getString(column_index);}

确保我们实现所需的覆盖;

@Override

protected void onResume() {

super.onResume();

}

@Override

protected void onDestroy() {

getPreferenceManager().getSharedPreferences().

unregisterOnSharedPreferenceChangeListener(this);

super.onDestroy();

}

@Override

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,

String key) {

}}

然后在您的主要壁纸服务活动中,您可以从共享首选项中提取图像的路径.

@Override

public void onSharedPreferenceChanged(SharedPreferences prefs,

String key) {

imageBg = prefs.getString("image_custom", "Bad Image");

getBackground();}

这是加载图像的相当粗略的例程.我试图引入一些错误捕获,以防文件被删除,重命名或SD卡被挂载(因此你丢失了你的图像).我还试图对设备方向进行一些粗略的检查.我相信你能做得更好.

还有一些Samplesize检查,因此您不会超过VM预算.这是此代码中防止强制关闭的最重要部分,应该包含在内.

当手机的方向改变时,我也会调用此例程,以便每次调整背景的大小.

void getBackground() {

if (this.cvwidth == 0 || this.cvheight == 0 || this.visibleWidth == 0) {

this.cvwidth = 480;

this.cvheight = 854;

this.visibleWidth = 480;}

if(new File(imageBg).exists()) {

int SampleSize = 1;

do {

BitmapFactory.Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;

bg = BitmapFactory.decodeFile(imageBg, options);

SampleSize = (int) (Math.ceil(options.outWidth/(this.visibleWidth * 2))*2);

options.inJustDecodeBounds = false;

try {options.inSampleSize = SampleSize;

bg = BitmapFactory.decodeFile(imageBg, options);}

catch (OutOfMemoryError e) {

SampleSize = SampleSize * 2;

}

} while (bg == null);

bg = Bitmap.createScaledBitmap(bg, this.cvwidth/2, this.cvheight, true);}

else {bg = BitmapFactory.decodeResource(getResources(), R.drawable.bg);

bg = Bitmap.createScaledBitmap(bg, this.cvwidth/2, this.cvheight, true);}

LoadText = "";

}

我希望这有帮助.我花了一个绝对的年龄来提出这一切,我知道还有一些方面我可以改进,但至少它应该让你去.

如果有人有关于使这个代码更好的建议,那么我全都耳朵.

android壁纸背景,android – 选择动态壁纸的背景相关推荐

  1. 动态壁纸android,Android 十大最新版本动态壁纸大盘点

    Typography Wall 是一款以透明雨滴做背景,同时能展示时钟.日期和电量信息的动态壁纸.这款透明雨滴时钟动态壁纸Typography Wall确实做的很漂亮,自从wpclock出来后,越来越 ...

  2. 壁纸背景墙/头像/动态壁纸小程序源码-支持用户投稿-带部分采集功能+搭建教程

    介绍: 今天自己搭建测试了一下这款背景墙/头像/动态壁纸小程序源码,源码使用dcloud云开发 (云开发优势:无需服务器域名直接搭建部署即可,成本低方便维护.)支持微信QQ双端小程序也就是说可以打包成 ...

  3. iphone主屏幕动态壁纸_苹果手机动态主屏幕壁纸 苹果怎么导入动态壁纸

    IPhone动态壁纸设置主屏幕为什么不会动? 苹果手机动态壁纸不动主要是因为一个设定成静态壁纸了,二是设定成主屏壁纸了.只需要将壁纸重新设置为锁屏屏幕壁纸,即可看到live动态壁纸效果了.iphone ...

  4. live2d动态壁纸android,live2dviewerex宅男自定义动态壁纸下载-live2dviewerex动态桌面2.0.4 官方安卓版下载_东坡手机下载...

    live2dviewerex动态桌面是一款非常有趣的手机动态壁纸,只需要QQ便能登录,在登录界面可以看到相关信息.首次进入APP有针对APP的详细帮助说明,请首次使用的用户认真阅读,上面会解决你的大多 ...

  5. android 动态label,Android仿抖音实现动态壁纸

    一.概述: 壁纸运行在一个Android服务之中,这个服务的名字叫做WallpaperService.当用户选择了一个壁纸之后,此壁纸所对应的WallpaperService便会启动并开始进行壁纸的绘 ...

  6. android动态壁纸2.2.1,动态壁纸选择器

    动态壁纸选择器是在Android手机上运行的手机动态壁纸程序. 您可以使用它来设置桌面墙纸并调整其他墙纸设置. 它具有各种内置的动态图片,可以随时更改. 需要它的朋友可以来最火软件站点击动态壁纸选择器 ...

  7. Android 12系统源码_系统壁纸(二)动态壁纸的设置流程

    在Android中,壁纸分为静态与动态两种.静态壁纸是一张图片,而动态壁纸则以动画为表现形式,或者可以对用户的操作作出反应.这两种形式看似差异很大,其实二者的本质是统一的.它们都以一个Service的 ...

  8. android视频动态壁纸app,短视频动态壁纸转换

    短视频动态壁纸转换app是一款能够将视频转换成动态壁纸的软件.短视频动态壁纸转换app虽然体积非常小巧但是短视频动态壁纸转换app的功能还是蛮强大的,而且操作很简单! 软件介绍 短视频动态壁纸转换ap ...

  9. android 无动态壁纸,设置的安卓动态壁纸,为什么过一会就自动没有了?

    设置的安卓动态壁纸,为什么过一会就自动没有了?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 设置的安卓动态壁纸,为什么 ...

  10. android视频动态壁纸app,视频动态壁纸app下载-视频动态壁纸app安卓版下载V1.0安卓版 - 非凡软件站...

    提供了海量高清壁纸以及各种各样主题的<视频动态壁纸>APP带给大家,大家可以根据自己喜欢的类型进行更换使用,打造独一无二的手机桌面.无论是动态壁纸还是静态壁纸都能在这里找到,各色各样的壁纸 ...

最新文章

  1. 六、使用数组模拟栈的思路及代码实现
  2. 脚本检测到文件特定词后做下一步动作 down restart
  3. qpython3调用adb_Python实现的基于ADB的Android远程工具
  4. ACR EE 全链路加速升级
  5. uboot的常用命令详解
  6. 升级后重启造成fsck.ext3: Unable to resolve UUID
  7. 我的世界基岩版json_我的世界基岩版下载_我的世界基岩版app下载_我的世界基岩版官网最新版下载-新手游网...
  8. Original error was: DLL load failed while importing _multiarray_umath: 找不到指定的模块
  9. Mac可读可写remount硬盘
  10. IT管理系统:让酒店更便宜
  11. Android将数据导出为excel文件的方法
  12. 姿态估计与行为识别(行为检测、行为分类)的区别
  13. Elasticsearch最佳实践之使用场景
  14. 同步四进制加法计数器(JK)
  15. 如何在企业不同发展阶段开展绩效管理?
  16. Altium Designer 17及以上版本快速画出Keep-Out layer层以便于覆铜操作
  17. Java常用框架笔记(1)
  18. 华为鸿蒙电脑操作系统测试版,华为鸿蒙OS测试
  19. 靠云业务独撑收入增长大梁,微软仍然被高估?
  20. vue导出excel模板

热门文章

  1. 爱可生 mysql监控_actiontech-zabbix-mysql-monitor
  2. 计算机语言可读性排名,计算机语言可读性强,容易记忆
  3. 平安夜 送自己一个小博客
  4. SwiftUI 设置圆角、边框
  5. 有趣的23000 同(近)意词
  6. 毕业设计基于linux下http,Linux下HTTP服务器设计-毕业设计.doc
  7. 团队协作OA解决方案
  8. 2022-2028全球二片罐行业调研及趋势分析报告
  9. 图像融合之Poisson融合及其改进
  10. 信息系统项目管理师学习笔记10-项目沟通管理和干系人管理