改变壁纸
Android使用wallpaperManager来改变壁纸,所调用的接口方法如下:
开发动态壁纸
Android界面是动态的,由程序实时控制的,开发步骤如下:
①开发一个子类继承WallpaperService基类
②继承基类后重写onCreateEngine方法,该方法返回WallpaperService.Engine子类对象
③实现WallpaperService.Engine的子类,重写其中的onVisibilityChanged()、onOffsetsChanged()等方法,通过SurfaceHolder进行动态的绘制图形。
运行动态壁纸,需要下面两项配置:
运行动态壁纸,需要下面两项配置: <service android:label="@string/app_name" android:name=".view.MyWallPaper" android:permission="android.permission.BIND_WALLPAPER" android:exported="true"> <!-- 为动态壁纸配置intent-filter--> <intent-filter> <action android:name="android.service.wallpaper.WallpaperService"/> </intent-filter> <!-- 为动态壁纸配置meta-data--> <meta-data android:name="android.service.wallpaper" android:resource="@xml/livewallpaper"/> </service>
讯享网
快捷方式
在长按某个应用的时候就会出现这样的快捷方式,在使用APP某个常用功能时很方便

实现方式如下:
静态方式
通过AndroidManifest.xml方式进行添加
①在主Activity中添加:
讯享网<activity android:name=".view.MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 指定快捷方式的资源文件--> <meta-data android:name="android.app.shortcuts" android:resource="@xml/fk_shortcuts"/> </activity>
②在xml中新建一个shortcuts,自定义其中内容
<?xml version="1.0" encoding="utf-8"?> <shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <shortcut android:enabled="true" android:icon="@drawable/ic_launcher_background" android:shortcutId="tsuky" android:shortcutDisabledMessage="@string/app_name" android:shortcutLongLabel="@string/app_name" android:shortcutShortLabel="@string/app_name"> <intent android:action="android.intent.action.VIEW" android:targetClass="com.example.yueeasy.view.MainActivity" android:targetPackage="com.example.yueeasy"/> <categories android:name="android:shortcuts,conversation"/> </shortcut> </shortcuts>
根元素是<shortcuts/>可以包含多个<shortcut/>子元素,<shortcut/>子元素的属性如下:
enabled:设置该快捷键项是否可用
icon:设置该快捷键的图标
shortcutDisabledMessage:设置禁用该快捷项时所显示的文本
shortcutLongLabel:设置该快捷项的长标题
shortcutShortLabel:设置该快捷项的短标题
intent 这里表示我们点击shortcut进行的操作,,targetPackage是指定一个目标应用的包名,targetClass是我们要跳转的目标类, android:action一定要配置, 否则会崩溃

Categories,这个东西目前位置官方只给提供了android.shortcut.conversation

动态方式
添加快捷方式:
讯享网 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { try { if (true) { ShortcutManager mShortcutManager = getSystemService(ShortcutManager.class); List<ShortcutInfo> infoList = new ArrayList<>(); infoList.add(createShortcutInfo( "id1", 0, icon1, "name1")); infoList.add(createShortcutInfo( "id2", 1, icon2, "name2")); if (mShortcutManager != null) mShortcutManager.setDynamicShortcuts(infoList); } } catch (Exception e) { e.printStackTrace(); } } private ShortcutInfo createShortcutInfo(String id, int rank, int icon, String label) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { return new ShortcutInfo.Builder(this, id) .setShortLabel(label)// 快捷方式桌面名称 .setLongLabel(label)// APP长按显示的标题 .setRank(rank)// 显示顺序 .setIcon(Icon.createWithResource(this, icon))// 快捷方式的图标 .setIntent(new Intent(Intent.ACTION_MAIN, null, this, MainActivity.class) .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)//根据需求来设置Flag .putExtra("key", id))// 传递跳转参数 .build(); } return null; }
Intent跳转页面的处理:
Intent intent = getIntent(); String data = intent.getStringExtra("key"); if(data != null){ switch (data){ case "id1": Intent intent1 = new Intent(this, test1Activity.class); startActivity(intent1); break; case "id2": Intent intent1 = new Intent(this, test2Activity.class); startActivity(intent2); break; } }
桌面快捷方式
把一个程序的快捷方式添加到桌面的步骤:
①使用shortcutManager.isRequestPinShortcutSupported()判断当前版本是否支持Pinned快捷方式
②创建shortcutInfo,设置它的ID、图标、长标题、短标题等。
③使用shortcutManager的 requestPinShortcut()方法请求添加Pinned快捷方式
讯享网ShortcutManager shortcutManager=getSystemService(ShortcutManager.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (shortcutManager.isRequestPinShortcutSupported()){ Intent intent=new Intent(MainActivity.this,TsukyActivity.class); intent.setAction("android.intent,action,VIEW"); //如果ID是my_shortcut的快捷方式已经存在,就用已有的信息 不存在则设置 ShortcutInfo shortcutInfo=new ShortcutInfo.Builder(MainActivity.this,"my_shortcut") .setShortLabel("快捷方式") .setIcon(Icon.createWithResource(this,R.drawable.heart)) .setIntent(intent).build(); //请求添加Pinned快捷方式 shortcutManager.requestPinShortcut(shortcutInfo,null); } }
设置了一个控件的点击事件,然后加入上述代码,运行后点击就会出现下面的添加快捷方式的按钮

桌面控件
桌面控件就是能直接显示在Android系统桌面上的小程序,时钟日历等
开发桌面控件的步骤
桌面控件是通过BroadcastReceiver的形式来进行控制的,因此每个桌面控件都对应一个BroadcastReceiver,为了更好的管理控件的开发,Android提供了AppWedgetProvider类,他是BroadcastReceiver的子类。
因此开发桌面控件,只要继承AppWedgetProvider,重写不同的生命周期方法即可。
onUpdate():负责更新桌面控件的方法
onDelete():桌面控件被删除时的回调方法
onEnabled():收到ACTION_APPWIDGET_ENABLED broadcast时回调该方法
onDisabled():收到ACTION_APPWIDGET_DISABLED broadcast时回调该方法
- 创建一个类继承AppWedgetProvider 重写onUpdate方法
- 创建一个RemoteViews对象,加载指定的布局文件
- 如果需要改变上一步 所加载的界面布局文件内容 可以通过RemoteViews进行修改,RemoteViews主要包含ImageView和TextView两种组件
- 创建一个ComponentName对象
- 调用AppWedgetManager更新桌面控件
- 还需要在Manifest中进行配置,由于他的本质是broadcastReceiver,所以要注册:
public class Desktop extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); //加载页面布局文件 创建RemoteView文件 RemoteViews remoteViews=new RemoteViews(context.getPackageName(), R.drawable.heart); //为ImageView设置图片 remoteViews.setImageViewResource(R.id.text,R.drawable.heart); //将AppWidgetProvider的子类伪装成ComponentName对象 ComponentName componentName=new ComponentName(context,Desktop.class); //调用appWidgetManager将remoteViews添加到ComponName中 appWidgetManager.updateAppWidget(componentName,remoteViews); } }
讯享网 android:exported="true"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget"/> </receiver>
作为meta-data,还需要在目录中添加appwidget的xml文件。从上到下分别是初始显示布局、最小高度、最小宽度、更新频率
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/activity_main" android:minHeight="70dp" android:minWidth="150dp" android:updatePeriodMillis="1000"> </appwidget-provider>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/43782.html