Android開発のアプリWidgetの詳細


Android通知システムは大きな特色であり、その中の一つはApp Widgetである。アプリケーションの開発では、多くの場合、アプリWidgetを追加してデスクトップに表示し、ユーザーとのタイムリーな実行が可能です。
相互作用ここでは簡単にアプリWidgetを開発する流れを熟知しましょう。
アプリでアプリWidgetを作成するには、少なくとも以下のようなものが必要です。
  • は、App Widget Provider Infoを作成して、App Widgetのメタデータを記述する必要がある。
  • は、自分のApp Widget ProviderがApp Widgetを更新するなどの操作を行う必要があります。
  • は、App Widgetのレイアウトを記述するためにレイアウトファイルを必要とする。
  • では、アプリWidgetを作成します。
    一、Android Manifest.xmlでApWidgetを宣言します。
    まず私たちはAndroid Manifest.xmlでApp Widget Providerを宣言する必要があります。フォーマットは以下の通りです
    
    <receiver android:name="MyAppWidgetProvider" >  
        <intent-filter>  
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />  
        </intent-filter>  
        <meta-data android:name="android.appwidget.provider"  
                   android:resource="@xml/my_appwidget_info" />  
    </receiver>  
    アプリWidget Providerは、実際にはBroadcastReceiverであり、特定のBroadcastを受信することができます。メタタグは、App Widgetが使用するメタデータを記述しており、android:resourceは、メタデータを定義するxmlファイルの位置を宣言している。
    二、アプリWidget Provider Infoのメタデータを追加する。
    アプリWidget Provider Infoは、App Widgetの本質的な特性を記述しています。例えば、App Widgetの更新期間、最小幅、長さ、使用されるレイアウトファイルは何ですか?
    configration Activityなど。私たちはXMLでApWidget Provider Infoオブジェクトを定義する必要があります。このXMLファイルはres/xmlフォルダの下に保存するべきです。以下は一つの例です。
    
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"  
        android:minWidth="294dp"  
        android:minHeight="72dp"  
        android:updatePeriodMillis="86400000"  
        android:previewImage="@drawable/preview"  
        android:initialLayout="@layout/example_appwidget"  
        android:configure="com.example.android.MyAppWidgetConfigure"   
        android:resizeMode="horizontal|vertical">  
    </appwidget-provider>  
    <appwidget provider>このラベルを使用してアプリWidget Provider Infoを定義する必要があります。例で使用した属性について説明します。
    minWidth、minHeightは、App Widgetが占有する必要がある最小の空間を定義している。
    udatePeriodMillisはどれぐらいの時間を定義しましたか?アプリWidgetは一回更新する必要があります。ここで定義されているのは大体の時間だけで、システムは正確な保証ができません。
    previewImageは、ユーザがApp Widgetを選択する際に現実的なアイコンを定義しています。
    initial Layoutは、アプリWidgetが使用するレイアウトファイルを定義しています。
    configureは、ApWidgetが追加時に起動しなければならないconfigration Activityを定義し、構成を実行するために使用します。
    resizeModeはスケーリングモードを定義しています。
    三、アプリWidgetを作成するために使用するレイアウトファイル
    ApWidgetを作成するには、レイアウト記述を提供するために、レイアウトファイルを作成しなければならない。Appwidgetがビューを作成するには、RemoteViewに基づいて作成する必要があります。効率などを考慮して、多くのコントロールが
    RemoteViewでは支持されています。RemoteViewで使用できるUIコントロールは以下のようになります。
    layout:FraameLayout、Linear Layout、RelativeLayout
    widget:AnalogClock,Button,Chronometer,ImageButton,ImageView,Progess Bar,Text View,View Flist View,GridView,StocView,AdapterView Flipper
    四、アプリWidget Providerを作成するサブクラス
    前に述べたApp Widget ProviderはBroadcastReceiverです。はい、それは確かにBroadcastReceiverから継承されていますが、App Widgetの放送をより便利に処理するために実装されました。
    アプリWidget Providerは、アプリWidgetの放送を受信すると、それぞれのタイプに応じて以下のいくつかの方法をトリガします。
    onUpdate():App Widgetは更新が必要な時、この方法を触発します。私達はこの方法を書き直して、中で更新の操作を実現する必要があります。configration Activityが定義されていない場合は、ApWidgetを追加します。
    を選択すると、この方法が起動されます。
    one Delete(Conteet,int[]:AppWidgetがApp Widget Hostから削除された時に、この方法がトリガされます。
    one Envaled:一つのアプリケーションに複数のApp Widgetを追加すると、最初のApp Widgetが追加された時にのみ、この方法が呼び出されます。
    onDispabled:アプリケーションの最後のApp WidgetがApp Widget Hostから削除されると、この方法がトリガされます。
    onReceive(Contect,Intent):これは実際にはBroadcastReceiverの中の方法であり、いずれかのBroadcastが受信されると、この方法を呼び出し、上記のコールバック方法の前に呼び出されます。
    五、ConfigrationActivityを作成する(オプション)
    アプリWidgetの追加が必要な場合は、いくつかの配置作業をすれば、Configration Activityを使用することができます。ConfigrationActivityを使うにはまず普通のActivityのようにAndroid Manifest.xmlの中で
    宣言を行う:
    
    <activity android:name=".ExampleAppWidgetConfigure">  
        <intent-filter>  
            <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>  
        </intent-filter>  
    </activity>  
    ただ、ここでactionタイプを追加する必要があります。android.appwidget.actions.APPWIDGET_。CONFIGUREのintent-filterです。そして、AppWidget Provider Infoで声明を出す必要があります。
    
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"  
        ...  
        android:configure="com.example.android.ExampleAppWidgetConfigure"   
        ... >  
    </appwidget-provider>  
    最後に、もちろんActivityを作成する必要があります。Configration Activityでは、必要な操作を実行します。
    1、アプリWidget IDを取得する
    
    Intent intent = getIntent();  
    Bundle extras = intent.getExtras();  
    if (extras != null) {  
        mAppWidgetId = extras.getInt(  
                AppWidgetManager.EXTRA_APPWIDGET_ID,   
                AppWidgetManager.INVALID_APPWIDGET_ID);  
    }  
    2、必要な配置操作を行い、App Widget Managerのインスタンスを取得し、RemoteViewsを更新する。
    
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);  
     
    RemoteViews views = new RemoteViews(context.getPackageName(),  
    R.layout.example_appwidget);  
    appWidgetManager.updateAppWidget(mAppWidgetId, views);  
    3、Activity resultを設定し、Intentに戻ります。
    
    Intent resultValue = new Intent();  
    resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);  
    setResult(RESULT_OK, resultValue);  
    finish();  
    これでConfigration Activityが作成されました。
    アンディロイド8.0以降は自分宛のアプリWidget Providerを受信できないので、追加が必要です。
    
    intent.setComponent(new ComponentName(context,CacheProvider.class));
    
    
    Intent intent = new Intent();
    intent.setAction(ACTION_CACHE_CLEAN);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    intent.setComponent(new ComponentName(context,CacheProvider.class));
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
                        0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    remoteViews.setOnClickPendingIntent(R.id.tv_clean, pendingIntent);
    上記の手順を実行したら、デスクトップに表示できるアプリWidgetが作成されました。
    以上はAndroid開発のApp Widgetの詳細です。AndroidアプリWidgetに関する詳細な資料は他の関連記事に注目してください。