android开发-app widget
2015-05-02 20:28
274 查看
本博文主要讲述的android开发中的桌面程序的开发--APP widget,主要用的是PendingIntent和RemoteViews。 PendingIntent主要用来设置桌面程序的相应方式。此对象可以有三种Intent方式,第一个是开始一个新的Activity,第二个是发送一个广播,第三个是开始一个service。
RemoteViews的作用:因为桌面程序和app程序不是属于一个进程,不能通过正常的操作控件的方式来操作。需要使用系统提供的RemoteViews对象来操作桌面程序。在这个类中有设置APP
Widget中控件属性的方法。
下面我们来看看代码,在代码中有分别包含了上述所说的PendingInetnt的两种方式(part 1:开始一个新的Activity;part 2:发送一个广播)和RemoteViews的使用方法:
主程序的Activity,MainActivity.java:
widget的界面布局文件appwidget_provider.xml:(在桌面看到的界面)
widget需要在桌面上添加我们创建的app,才会在桌面上显示出来。可以空白处长按,就会出来添加widget选项,选中我们的app既会在桌面显示。
转载:http://www.2cto.com/kf/201412/360947.html
RemoteViews的作用:因为桌面程序和app程序不是属于一个进程,不能通过正常的操作控件的方式来操作。需要使用系统提供的RemoteViews对象来操作桌面程序。在这个类中有设置APP
Widget中控件属性的方法。
下面我们来看看代码,在代码中有分别包含了上述所说的PendingInetnt的两种方式(part 1:开始一个新的Activity;part 2:发送一个广播)和RemoteViews的使用方法:
主程序的Activity,MainActivity.java:
package com.example.appwidget; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } appwidget桌面程序的类AppWidgetProviderTest.java: package com.example.appwidget; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.widget.RemoteViews; public class AppWidgetProviderTest extends AppWidgetProvider { //自定义一个ACTION常量 private final String USER_ACTION = "com.example.appwiget.USER_ACTION"; //当APP widget实例被删除时,会调用 @Override public void onDeleted(Context context, int[] appWidgetIds) { // TODO Auto-generated method stub super.onDeleted(context, appWidgetIds); System.out.println("onDeleted()"); } //当最后一个app widget实例被删除时,会调用 @Override public void onDisabled(Context context) { // TODO Auto-generated method stub super.onDisabled(context); System.out.println("onDisabled()"); } //当第一个App widget实例被创建时,会调用 @Override public void onEnabled(Context context) { // TODO Auto-generated method stub super.onEnabled(context); System.out.println("onEnabled()"); } //接收app收到的所有广播事件 @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub System.out.println("onReceive()"); //比较下,如果收到的广播是USER_ACTION,则输出信息,且更新桌面控件 if(USER_ACTION.equals(intent.getAction())){ System.out.println("onReceive --> " + USER_ACTION); //获得RemoteViews对象 RemoteViews remoteView = new RemoteViews(context.getPackageName(),R.layout.appwidget_provider); //更新桌面TextView控件的text remoteView.setTextViewText(R.id.myText, "onReceive"); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); ComponentName componentName = new ComponentName(context, AppWidgetProviderTest.class); appWidgetManager.updateAppWidget(componentName, remoteView); }else{ //调用父类的方法 super.onReceive(context, intent); } } //在到达指定的更新时间之后或者向桌面添加App widget实例时,会调用此方法 @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // TODO Auto-generated method stub super.onUpdate(context, appWidgetManager, appWidgetIds); System.out.println("onUpdate()"); //为每一个app widget实例绑定一个remoteViews监听器,每创建的一个app widget实例都有一个对应的ID for(int i = 0; i < appWidgetIds.length; i ++){ System.out.println("appWidgetIds -->" + appWidgetIds[i]); //创建一个Intent对象 Intent intent = new Intent(); //part 1:pendingIntent用来打开一个新的Activity /*intent.setClass(context, MainActivity.class); //使用getActivity方法创建一个pendingIntent对象,此对象用于跳转Activity,将intent打包给pendingIntent PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); */ //end part1 //part 2:pendingIntent用来发送一个广播 //设置action intent.setAction(USER_ACTION); //使用getBroadcast()方法创建一个pendingIntent对象 PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); //end part2 //创建一个RemoteViews对象 RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider); //RemoteViews对象将Button和pendingIntent绑定。通过pendingIntent获得intent remoteView.setOnClickPendingIntent(R.id.WidgetButton, pendingIntent); appWidgetManager.updateAppWidget(appWidgetIds[i], remoteView); } } }app
widget的界面布局文件appwidget_provider.xml:(在桌面看到的界面)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/myText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="welcome appwidget" android:background="#ff0000" /> <Button android:id="@+id/WidgetButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Widget Button" /> </LinearLayout>appwidget_provider的元数据的文件appwidget_provider_info.xml:
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="180dp" android:minHeight="40dp" android:updatePeriodMillis="1000" android:initialLayout="@layout/appwidget_provider" > </appwidget-provider>AndroidManifest.xml文件:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.appwidget" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity<br> android:name="com.example.appwidget.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.example.appwidget> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> <intent-filter ><!--自定义的过滤器 --> <action android:name="com.example.appwiget.USER_ACTION"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_provider_info"/> </receiver> </application> </manifest>app
widget需要在桌面上添加我们创建的app,才会在桌面上显示出来。可以空白处长按,就会出来添加widget选项,选中我们的app既会在桌面显示。
转载:http://www.2cto.com/kf/201412/360947.html
相关文章推荐
- Android Launcher开发(二)AppWidget(桌面小部件)解析
- Android appWidget——每日一句应用开发
- android之App Widget开发实例
- Android App widget 开发步骤
- Android开发历程_15(AppWidget的使用)
- Android 开发之实时更新 App Widget
- 实现开启和关闭android移动网络(做AppWidget开发的收获)
- android应用开发(三)—— Appwidget
- Android开发之App widget用法实例分析
- Android开发之创建App Widget和更新Widget内容
- Android开发视频第二季之七:App Widget(3)
- Android AppWidget 开发中PendingIntent传送数据丢失解决办法
- android之App Widget开发实例
- android 开发之App Widget 使用
- Android开发之App Widget(二)
- 实现开启和关闭android移动网络(做AppWidget开发的收获)
- android之App Widget开发实例代码解析
- 【Android AppWidget开发流程】
- Android:AppWidget开发流程
- Android学习指南之三十五:App Widget开发入门指导