Android桌面插件的开发
生活随笔
收集整理的這篇文章主要介紹了
Android桌面插件的开发
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
想要做個可以在桌面上顯示的插件需要3個步驟:
? 1. 繼承AppWidgetProvider
? 2. 編寫widget的界面xml, 編寫mywidget屬性xml
? 3. AndroidManifest.xml ?注冊插件
?
先上圖
這個案例是一個會自增的數字, 非常的簡單。
?
1. 繼承AppWidgetProvider
[java] ?
public class MyWidgetProvider extends AppWidgetProvider ?
{ ?
? ? private static Timer myTimer; ?
? ? private static int index = 0; ?
? ? ??
? ? private final String broadCastString = "knowheart.wd.appWidgetUpdate"; ??
? ? ??
? ? @Override ?
? ? public void onDeleted(Context context, int[] appWidgetIds) ?
? ? { ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onDeleted(context, appWidgetIds); ?
? ? ? ? ??
? ? } ?
? ? ??
? ? ??
??
? ? @Override ?
? ? public void onEnabled(Context context) ?
? ? { ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onEnabled(context); ?
? ? ? ? ??
? ? } ?
??
??
??
? ? @Override ?
? ? public void onUpdate(Context context, AppWidgetManager appWidgetManager, ?
? ? ? ? ? ? int[] appWidgetIds) ?
? ? { ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onUpdate(context, appWidgetManager, appWidgetIds); ?
? ? } ?
? ? ??
? ? ??
? ? ??
? ? @Override ?
? ? public void onReceive(Context context, Intent intent) ?
? ? { ?
? ? ? ? super.onReceive(context, intent); ?
? ? } ?
??
} ?
首先我們添加一個類, 用于繼承AppWidgetProvider, 它就是用來控制我們的插件更新刪除的一些操作
這里會用到onEnabled、onUpdate、onReceive三個方法
?
? 2. 編寫widget的界面xml, 編寫mywidget屬性xml
layout/widget_layout.xml
[html]?
<?xml version="1.0" encoding="utf-8"?> ? ?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ?
? ? android:orientation="vertical" ?
? ? android:background="#000000" ?
? ? android:layout_gravity="center_horizontal" ?
? ? android:layout_width="300dp" ?
? ? android:layout_height="wrap_content"> ?
??
? ? <TextView ?
? ? ? ? android:id="@+id/update" ?
? ? ? ? android:text="0" ??
? ? ? ? android:layout_width="fill_parent" ?
? ? ? ? android:layout_height="wrap_content" ??
? ? ? ? android:gravity="center" ?
? ? ?/> ?
? ? ??
</LinearLayout> ?
?
新建一個文件夾命名xml, 再添加一個xml文件
xml/mywidget.xml
[html] ?
<?xml version="1.0" encoding="UTF-8"?> ?
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" ? ?
? ? android:minWidth="300dip" android:minHeight="72dp" ? ?
? ? android:updatePeriodMillis="86400000" ??
? ? android:initialLayout="@layout/widget_layout" ? ?
? ? > ? ?
</appwidget-provider> ? ?
?
這里設置插件的長寬、刷新時間, 0為手動刷新、以及插件的界面xml
?
? 3. AndroidManifest.xml ?注冊插件
[html]?
<!-- 注冊該插件 --> ?
? ? ? ?<receiver android:name="MyWidgetProvider" > ?
? ? ? ? ? ?<intent-filter > ?
? ? ? ? ? ? ? ?<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> ?
? ? ? ? ? ? ? ?<action android:name="com.wd.appWidgetUpdate" > ?
? ? ? ? ? ? ? ?</action> ?
? ? ? ? ? ?</intent-filter> ?
??
? ? ? ? ? ?<meta-data ?
? ? ? ? ? ? ? ?android:name="android.appwidget.provider" ?
? ? ? ? ? ? ? ?android:resource="@xml/mywidget" /> ?
? ? ? ?</receiver> ?
?
?
<action android:name="com.wd.appWidgetUpdate" > ?這一段是向系統注冊一個廣播, 我們會在邏輯處理時將該廣播發(fā)送給AppWidgetProvider的更新方法, 以實現手動刷新。
?
那么完成上面三部基本上就可以顯示一個插件在桌面上了。
?
如果我們想讓插件顯示的數字每秒加一的話, 我們需要做后臺處理
[java]?
public class MyWidgetProvider extends AppWidgetProvider ?
{ ?
? ? private static Timer myTimer; ?
? ? private static int index = 0; ?
? ? ??
? ? //定義我們要發(fā)送的事件 ?
? ? private final String broadCastString = "com.wd.appWidgetUpdate"; ??
? ? ??
? ? @Override ?
? ? public void onDeleted(Context context, int[] appWidgetIds) ?
? ? { ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onDeleted(context, appWidgetIds); ?
? ? ? ? ??
? ? ? ? System.out.println("onDeleted"); ?
? ? } ?
? ? ??
? ? ??
??
? ? @Override ?
? ? public void onEnabled(Context context) ?
? ? { ?
? ? ? ? System.out.println("onEnabled"); ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onEnabled(context); ?
? ? ? ? ??
? ? ? ? //在插件被創(chuàng)建的時候這里會被調用, 所以我們在這里開啟一個timer 每秒執(zhí)行一次 ?
? ? ? ? MyTask mMyTask = new MyTask(context); ?
? ? ? ? myTimer = new Timer(); ?
? ? ? ? myTimer.schedule(mMyTask, 1000, 1000); ?
? ? ? ? System.out.println("onEnabled2"); ?
? ? } ?
??
??
??
? ? @Override ?
? ? public void onUpdate(Context context, AppWidgetManager appWidgetManager, ?
? ? ? ? ? ? int[] appWidgetIds) ?
? ? { ?
? ? ? ? System.out.println("onUpdate"); ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onUpdate(context, appWidgetManager, appWidgetIds); ?
? ? } ?
? ? ??
? ? ??
? ? ??
? ? @Override ?
? ? public void onReceive(Context context, Intent intent) ?
? ? { ?
? ? ? ? //當判斷到是該事件發(fā)過來時, 我們就獲取插件的界面, 然后將index自加后傳入到textview中 ?
? ? ? ? System.out.println("onReceive"); ?
? ? ? ? if(intent.getAction().equals(broadCastString)) ?
? ? ? ? { ?
? ? ? ? ? ? index++; ?
? ? ? ? ? ? ??
? ? ? ? ? ? RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout); ?
? ? ? ? ? ? rv.setTextViewText(R.id.update, Integer.toString(index)); ?
? ? ? ? ? ? ??
? ? ? ? ? ? //將該界面顯示到插件中 ?
? ? ? ? ? ? AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); ?
? ? ? ? ? ? ComponentName componentName = new ComponentName(context,MyWidgetProvider.class); ?
? ? ? ? ? ? appWidgetManager.updateAppWidget(componentName, rv); ?
? ? ? ? } ? ??
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onReceive(context, intent); ?
? ? } ?
??
??
? ? ??
? ? class MyTask extends TimerTask ?
? ? { ?
??
? ? ? ? private Context mcontext = null; ?
? ? ? ? private Intent intent = null; ?
? ? ? ? ??
? ? ? ? public MyTask(Context context) { ?
? ? ? ? ? ? ??
? ? ? ? ? ? //新建一個要發(fā)送的Intent ?
? ? ? ? ? ? mcontext = context; ?
? ? ? ? ? ? intent = new Intent(); ?
? ? ? ? ? ? intent.setAction(broadCastString); ?
? ? ? ? } ?
? ? ? ? @Override ?
? ? ? ? public void run() ?
? ? ? ? { ?
? ? ? ? ? ? System.out.println("2"); ?
? ? ? ? ? ? //發(fā)送廣播(由onReceive來接收) ?
? ? ? ? ? ? mcontext.sendBroadcast(intent); ?
? ? ? ? } ?
? ? ? ? ??
? ? } ?
}
? 1. 繼承AppWidgetProvider
? 2. 編寫widget的界面xml, 編寫mywidget屬性xml
? 3. AndroidManifest.xml ?注冊插件
?
先上圖
這個案例是一個會自增的數字, 非常的簡單。
?
1. 繼承AppWidgetProvider
[java] ?
public class MyWidgetProvider extends AppWidgetProvider ?
{ ?
? ? private static Timer myTimer; ?
? ? private static int index = 0; ?
? ? ??
? ? private final String broadCastString = "knowheart.wd.appWidgetUpdate"; ??
? ? ??
? ? @Override ?
? ? public void onDeleted(Context context, int[] appWidgetIds) ?
? ? { ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onDeleted(context, appWidgetIds); ?
? ? ? ? ??
? ? } ?
? ? ??
? ? ??
??
? ? @Override ?
? ? public void onEnabled(Context context) ?
? ? { ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onEnabled(context); ?
? ? ? ? ??
? ? } ?
??
??
??
? ? @Override ?
? ? public void onUpdate(Context context, AppWidgetManager appWidgetManager, ?
? ? ? ? ? ? int[] appWidgetIds) ?
? ? { ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onUpdate(context, appWidgetManager, appWidgetIds); ?
? ? } ?
? ? ??
? ? ??
? ? ??
? ? @Override ?
? ? public void onReceive(Context context, Intent intent) ?
? ? { ?
? ? ? ? super.onReceive(context, intent); ?
? ? } ?
??
} ?
首先我們添加一個類, 用于繼承AppWidgetProvider, 它就是用來控制我們的插件更新刪除的一些操作
這里會用到onEnabled、onUpdate、onReceive三個方法
?
? 2. 編寫widget的界面xml, 編寫mywidget屬性xml
layout/widget_layout.xml
[html]?
<?xml version="1.0" encoding="utf-8"?> ? ?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ?
? ? android:orientation="vertical" ?
? ? android:background="#000000" ?
? ? android:layout_gravity="center_horizontal" ?
? ? android:layout_width="300dp" ?
? ? android:layout_height="wrap_content"> ?
??
? ? <TextView ?
? ? ? ? android:id="@+id/update" ?
? ? ? ? android:text="0" ??
? ? ? ? android:layout_width="fill_parent" ?
? ? ? ? android:layout_height="wrap_content" ??
? ? ? ? android:gravity="center" ?
? ? ?/> ?
? ? ??
</LinearLayout> ?
?
新建一個文件夾命名xml, 再添加一個xml文件
xml/mywidget.xml
[html] ?
<?xml version="1.0" encoding="UTF-8"?> ?
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" ? ?
? ? android:minWidth="300dip" android:minHeight="72dp" ? ?
? ? android:updatePeriodMillis="86400000" ??
? ? android:initialLayout="@layout/widget_layout" ? ?
? ? > ? ?
</appwidget-provider> ? ?
?
這里設置插件的長寬、刷新時間, 0為手動刷新、以及插件的界面xml
?
? 3. AndroidManifest.xml ?注冊插件
[html]?
<!-- 注冊該插件 --> ?
? ? ? ?<receiver android:name="MyWidgetProvider" > ?
? ? ? ? ? ?<intent-filter > ?
? ? ? ? ? ? ? ?<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> ?
? ? ? ? ? ? ? ?<action android:name="com.wd.appWidgetUpdate" > ?
? ? ? ? ? ? ? ?</action> ?
? ? ? ? ? ?</intent-filter> ?
??
? ? ? ? ? ?<meta-data ?
? ? ? ? ? ? ? ?android:name="android.appwidget.provider" ?
? ? ? ? ? ? ? ?android:resource="@xml/mywidget" /> ?
? ? ? ?</receiver> ?
?
?
<action android:name="com.wd.appWidgetUpdate" > ?這一段是向系統注冊一個廣播, 我們會在邏輯處理時將該廣播發(fā)送給AppWidgetProvider的更新方法, 以實現手動刷新。
?
那么完成上面三部基本上就可以顯示一個插件在桌面上了。
?
如果我們想讓插件顯示的數字每秒加一的話, 我們需要做后臺處理
[java]?
public class MyWidgetProvider extends AppWidgetProvider ?
{ ?
? ? private static Timer myTimer; ?
? ? private static int index = 0; ?
? ? ??
? ? //定義我們要發(fā)送的事件 ?
? ? private final String broadCastString = "com.wd.appWidgetUpdate"; ??
? ? ??
? ? @Override ?
? ? public void onDeleted(Context context, int[] appWidgetIds) ?
? ? { ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onDeleted(context, appWidgetIds); ?
? ? ? ? ??
? ? ? ? System.out.println("onDeleted"); ?
? ? } ?
? ? ??
? ? ??
??
? ? @Override ?
? ? public void onEnabled(Context context) ?
? ? { ?
? ? ? ? System.out.println("onEnabled"); ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onEnabled(context); ?
? ? ? ? ??
? ? ? ? //在插件被創(chuàng)建的時候這里會被調用, 所以我們在這里開啟一個timer 每秒執(zhí)行一次 ?
? ? ? ? MyTask mMyTask = new MyTask(context); ?
? ? ? ? myTimer = new Timer(); ?
? ? ? ? myTimer.schedule(mMyTask, 1000, 1000); ?
? ? ? ? System.out.println("onEnabled2"); ?
? ? } ?
??
??
??
? ? @Override ?
? ? public void onUpdate(Context context, AppWidgetManager appWidgetManager, ?
? ? ? ? ? ? int[] appWidgetIds) ?
? ? { ?
? ? ? ? System.out.println("onUpdate"); ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onUpdate(context, appWidgetManager, appWidgetIds); ?
? ? } ?
? ? ??
? ? ??
? ? ??
? ? @Override ?
? ? public void onReceive(Context context, Intent intent) ?
? ? { ?
? ? ? ? //當判斷到是該事件發(fā)過來時, 我們就獲取插件的界面, 然后將index自加后傳入到textview中 ?
? ? ? ? System.out.println("onReceive"); ?
? ? ? ? if(intent.getAction().equals(broadCastString)) ?
? ? ? ? { ?
? ? ? ? ? ? index++; ?
? ? ? ? ? ? ??
? ? ? ? ? ? RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout); ?
? ? ? ? ? ? rv.setTextViewText(R.id.update, Integer.toString(index)); ?
? ? ? ? ? ? ??
? ? ? ? ? ? //將該界面顯示到插件中 ?
? ? ? ? ? ? AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); ?
? ? ? ? ? ? ComponentName componentName = new ComponentName(context,MyWidgetProvider.class); ?
? ? ? ? ? ? appWidgetManager.updateAppWidget(componentName, rv); ?
? ? ? ? } ? ??
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? super.onReceive(context, intent); ?
? ? } ?
??
??
? ? ??
? ? class MyTask extends TimerTask ?
? ? { ?
??
? ? ? ? private Context mcontext = null; ?
? ? ? ? private Intent intent = null; ?
? ? ? ? ??
? ? ? ? public MyTask(Context context) { ?
? ? ? ? ? ? ??
? ? ? ? ? ? //新建一個要發(fā)送的Intent ?
? ? ? ? ? ? mcontext = context; ?
? ? ? ? ? ? intent = new Intent(); ?
? ? ? ? ? ? intent.setAction(broadCastString); ?
? ? ? ? } ?
? ? ? ? @Override ?
? ? ? ? public void run() ?
? ? ? ? { ?
? ? ? ? ? ? System.out.println("2"); ?
? ? ? ? ? ? //發(fā)送廣播(由onReceive來接收) ?
? ? ? ? ? ? mcontext.sendBroadcast(intent); ?
? ? ? ? } ?
? ? ? ? ??
? ? } ?
}
總結
以上是生活随笔為你收集整理的Android桌面插件的开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html span自动换行,span标签
- 下一篇: 解决七彩虹断剑C.A320M-K PRO