20140917设置动态壁纸

Manifest.xml中:

         <service
            android:enabled="true"
            android:permission="android.permission.BIND_WALLPAPER"
            android:name="com.android.settings.common.display.BackgroundSettingService">
            <intent-filter>
                <action android:name="android.service.wallpaper.WallpaperService"></action>
            </intent-filter>
            <meta-data
                android:name="android.service.wallpaper"
                android:resource="@xml/wallpaper">
            </meta-data>
        </service>

  

选中设置中的条目:

		Activity activity = getActivity();
		PreferenceScreen screenBackgroundSetting = (PreferenceScreen) findPreference(KEY_BACKGROUND_SETTING);
		if(screenBackgroundSetting != null){
			screenBackgroundSetting.setOnPreferenceClickListener(new OnPreferenceClickListener(){

				@Override
				public boolean onPreferenceClick(Preference preference) {
					// TODO Auto-generated method stub
					startFragmentTransaction(new CommonBackgroundSettingFragment());
					return true;
				}
			});
		}

右边界面切换为如下Fragment:

package com.android.settings.common.display;

import android.app.Fragment;
import android.app.WallpaperInfo;
import android.app.WallpaperManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

import com.android.settings.R;

public class CommonBackgroundSettingFragment extends Fragment{
	private Button btnBackground1;
	private static final String tagetPackageName = "com.android.wallpaper";
	private static final int REQUEST_SET_LIVE_WALLPAPER = 101;
	private static final String TAG = "CommonBackgroundSettingFragment";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View rootView = inflater.inflate(R.layout.fragment_background_setting, container, false);
		btnBackground1 = (Button) rootView.findViewById(R.id.btnBackground1);
		btnBackground1.requestFocus();
		btnBackground1.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setAction(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER);
				startActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER);
				Toast.makeText(CommonBackgroundSettingFragment.this.getActivity(), getString(R.string.start_background_setting), Toast.LENGTH_LONG).show();
			}
		});
		return rootView;
	}

	@Override
	public void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == REQUEST_SET_LIVE_WALLPAPER) {
            if (isLiveWallpaperRunning(this.getActivity(), tagetPackageName)) {
               Toast.makeText(this.getActivity(), "LiveWallpaper is Running", Toast.LENGTH_LONG).show();

            }else{
                Toast.makeText(this.getActivity(), "LiveWallpaper is not Running", Toast.LENGTH_LONG).show();
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
	}

	/**
     * 判断一个动态壁纸是否已经在运行
     *
     * @param context
     *            :上下文
     * @param tagetPackageName
     *            :要判断的动态壁纸的包名
     * @return
     */
    public static boolean isLiveWallpaperRunning(Context context, String tagetPackageName) {
        WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);// 得到壁纸管理器
        WallpaperInfo wallpaperInfo = wallpaperManager.getWallpaperInfo();// 如果系统使用的壁纸是动态壁纸话则返回该动态壁纸的信息,否则会返回null
        if (wallpaperInfo != null) { // 如果是动态壁纸,则得到该动态壁纸的包名,并与想知道的动态壁纸包名做比较
            String currentLiveWallpaperPackageName = wallpaperInfo.getPackageName();
            if (currentLiveWallpaperPackageName.equals(tagetPackageName)) {
                return true;
            }
        }
        return false;
    }  

}

 

设置动态壁纸的Service:

/**
 * LiveWallpaper Launcher And Preference Template
 * The MIT License
 * copyright (c) 2011 mdlab.jp
 * @author itoz
 */
package com.android.settings.common.display;

import java.sql.Date;
import java.text.SimpleDateFormat;

import android.annotation.SuppressLint;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Handler;
import android.service.wallpaper.WallpaperService;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.widget.Toast;
import com.android.settings.R;

@SuppressLint("NewApi")
public class BackgroundSettingService extends WallpaperService
{
	private static final String TAG = "BackgroundSettingService";

	 private Handler handler = new Handler();  

	    @Override
	    public void onCreate() {
	        Log.i(TAG, "service onCreate");
	        super.onCreate();
	    }  

	    @Override
	    public void onDestroy() {
	    	Log.i(TAG, "service onDestory");
	        super.onDestroy();
	    }  

	    @Override
	    public Engine onCreateEngine() {
	    	Log.i(TAG, "service onCreateEngine");
	        return new MyEngine();
	    }  

	    private class MyEngine extends Engine{  

	        private float x = 200;
	        private float y = 300;
	        private Paint mPaint;
	        private boolean mVisible = false;  

	        private Runnable drawThread = new Runnable() {
	            public void run() {
	                drawWallpaper();
	            }
	        };  

	        public MyEngine(){
	        	Log.i(TAG, "MyEngine");
	            mPaint = new Paint();
	            mPaint.setColor(Color.RED);
	            mPaint.setAntiAlias(true);
	            mPaint.setStrokeWidth(4);
	            mPaint.setStyle(Paint.Style.STROKE);
	            mPaint.setTextSize(24);
	        }  

	        @Override
	        public Bundle onCommand(String action, int x, int y, int z, Bundle extras, boolean resultRequested) {
	            // TODO Auto-generated method stub
	        	Log.i(TAG, "onCommand");
	            return super.onCommand(action, x, y, z, extras, resultRequested);
	        }  

	        @Override
	        public void onCreate(SurfaceHolder surfaceHolder) {
	        	Log.i(TAG, "onCreate");
	            super.onCreate(surfaceHolder);
	            //作用是使壁纸能响应touch event,默认是false
	            setTouchEventsEnabled(true);
	        }  

	        @Override
	        public void onDestroy() {
	        	Log.i(TAG, "onDestroy");
	            super.onDestroy();
	            handler.removeCallbacks(drawThread);
	        }  

	        @Override
	        public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) {
	            // TODO Auto-generated method stub
	        	Log.i(TAG, "onoffsetsChanged");
	            super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixelOffset, yPixelOffset);
	        }  

	        @Override
	        public void onVisibilityChanged(boolean visible) {
	        	Log.i(TAG, "onVisibilityChanged");
	            mVisible = visible;
	            if (visible) {
	                //开始
	                handler.postDelayed(drawThread, 50);
	            } else {
	                handler.removeCallbacks(drawThread);
	            }
	        }  

	        @Override
	        public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
	        	Log.i(TAG, "onSurfaceChanged");
	            // TODO Auto-generated method stub
	            super.onSurfaceChanged(holder, format, width, height);
	        }  

	        @Override
	        public void onSurfaceCreated(SurfaceHolder holder) {
	        	Log.i(TAG, "onSurfaceCreated");
	            super.onSurfaceCreated(holder);
	        }  

	        @Override
	        public void onSurfaceDestroyed(SurfaceHolder holder) {
	        	Log.i(TAG, "onSurfaceDestoryed");
	            // TODO Auto-generated method stub
	            super.onSurfaceDestroyed(holder);
	            handler.removeCallbacks(drawThread);
	        }  

	        @Override
	        public void onTouchEvent(MotionEvent event) {
	        	Log.i(TAG, "onTouchEvent");
	            // TODO Auto-generated method stub
	            super.onTouchEvent(event);
	        }  

	        private void drawWallpaper() {  

	            SurfaceHolder holder = getSurfaceHolder();
	            Canvas canvas = holder.lockCanvas();
	            drawTime(canvas);
	            holder.unlockCanvasAndPost(canvas);  

	            //循环执行
	            handler.postDelayed(drawThread, 50);
	        }  

	        private void drawTime(Canvas canvas) {
	            Date date = new Date(System.currentTimeMillis());
	            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
	            String dataStr = sdf.format(date);
	            canvas.save();
	            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.captain_america);
	            Bitmap mBitmapDisplayed = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), false);
	            canvas.drawBitmap(mBitmapDisplayed, 0, 0, null);
//	            canvas.drawColor(0xff00ff00);
	            canvas.drawText(dataStr, x, y, mPaint);
	            canvas.restore();
	        }
	    }  

}

 

效果为:背景是“captain_america.png”,同时上层有时间的动态更新。

时间: 2024-08-03 19:12:59

20140917设置动态壁纸的相关文章

android设置动态壁纸 (Wallpaper) 介绍

当进入改壁纸的设置页面 但是还没有设置时 09-21 07:55:05.575: INFO/System.out(1337): service onCreate09-21 07:55:05.614: INFO/System.out(1337): service onCreateEngine09-21 07:55:05.634: INFO/System.out(1337): MyEngine09-21 07:55:05.663: INFO/System.out(1337): onCreate09-

Android 4.1 设置默认开机动态壁纸

最新在对Android 4.1做一些定制性的工作,刚好遇到了设置第三方动态壁纸为默认启动壁纸的问题,遂做笔记如下. 需要修改的文件为: 找到SourceCode/framework/base/core/res/res/values/config.xml中的: <string name="default_wallpaper_component">@null</string> 将其中的@null修改内容为: <string name="default

关于MAC设置免费的动态壁纸

首先大部分的动态壁纸都是收费的或者是已经固定的,其实这一款也是固定的 但是这个固定的是可以进行修改的 第一先在App Store下载 LiveDesktop Pro  这一款是免费的 然后下载后进行打开会是这种这几款是默认的 打开应用程序找到LiveDesktop Pro 显示包内容然后进去 在进Contents在进Resoures 然后自己制作一段小视频(mp4)格式,把视频的名称改成1.mp4   1.png是展示图片1.mp4是播放的桌面 然后在打开LiveDesktop Pro进入选择第

android 动态壁纸开发

转:http://www.eoeandroid.com/thread-100389-1-1.html android 动态壁纸开发参考:http://www.ophonesdn.com/article/show/278推荐:http://www.oschina.net/code/snippet_203635_7426http://blog.csdn.net/homebei2/article/details/6079580resources/articles/live-wallpapers.htm

有趣的动态壁纸如何制作

随着科技的发展,很多人已经不再满足于静态的图片,不管是在平时的聊天还是关于手机的壁纸都是如此,在聊天的时候会使用到GIF动态图,手机中的壁纸也会设置成动态的,那今天分享一下有趣的动态壁纸如何制作吧! 1.今天要说的是在电脑端制作动态图的方法,制作步骤很简单,只需要在电脑上运行一个GIF工具即可完成动态图的制作:2.首先在电脑上安装迅捷GIF制作工具,双击打开之后会有两个选择按钮,即"启动屏幕录制"和"启动GIF编辑器"; 3.点击前者之后会自动跳出一个录制框,可以录

Axure7.0页面跳转设置动态面板状态

整站原型设计中,不可能把所有功能都在一个页面展示出来,一定要那样做,可能要在一个页面画几十个动态面板,上百个状态了,先不说好不好维护和修改,这样叠罗汉足以让Axure跑死... 所以我们经常按功能分类,分别设计出几个页面来展示.这样问题就来了(挖掘技术究竟哪家强呢?),对于那些有动态面板且面板状态较多的页面,跳转过去的时候,只会显示动态面板第一个状态,肿么办? 情景再现: 有这样一个导航栏,其中首页,信息检索,审核处理这三个功能点设计在一个页面(default.html),用一个动态面板的三个状

cisco路由器设置动态pppoe

CISCO上配置 PPPOE拨号 r1(config)#vpdn enable                                     开启虚拟拨号VPDN r1(config)#vpdn-group pppoe                                定义组名(pppoe) r1(config-vpdn)#request-dialin                             这里是请求拨入 r1(config-vpdn-req-in)#pr

js+jquery动态设置/增加/删除/获取元素属性的两种方法集锦对比(动态onclick属性设置+动态title设置)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html140/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>

如何设置电脑桌面动态壁纸

今天看到有朋友电脑桌面是动态模式,甚是喜欢,可以看出一个人的性格与品位.那么如何将电脑壁纸换成动态的呢? 1.下载一款软件安装. 2.安装好后,可以根据自己需求选择,并下载,下载完后在本地壁纸应用即可.双击桌面即可清空桌面.干净的呈现. 3.我们想把自己的视频.网页.壁纸.音乐等应用到此软件.那么如何修改呢? 首先找到安装的此文件夹:UpupooResource  然后从新运行此软件即可. 原文地址:https://www.cnblogs.com/su-root/p/9820993.html