一个切换的Widget
16lz
2021-01-24
因为是widget所以效果图不上了,直接看布局文件吧:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="108px" android:layout_height="124px" android:gravity="center" android:orientation="vertical" > <ImageView android:id="@+id/newwork_switch" android:layout_width="fill_parent" android:layout_height="fill_parent" /></LinearLayout>
在看看manifest文件吧:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xxx.networkswitch" android:versionCode="1" android:versionName="1.0" android:sharedUserId="android.uid.system" > <!-- <uses-sdk android:minSdkVersion="15" /> --> <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/> <application android:label="@string/app_name" > <receiver android:name=".NetworkSwitchWidgetProvider" android:icon="@drawable/net_press"><meta-data android:name="android.appwidget.provider"android:resource="@xml/appwidget_provider"></meta-data><intent-filter><action android:name="com.xxx.action.widget.click"></action><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /><action android:name="com.xxx.action.widget.network.changed" /></intent-filter></receiver> </application></manifest>
好吧 看看重点
android:resource="@xml/appwidget_provider"></meta-data>
<?xml version="1.0" encoding="UTF-8"?><appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="54dip" android:minHeight="62dip" android:updatePeriodMillis="0" android:previewImage="@drawable/net_press" android:initialLayout="@layout/main"></appwidget-provider>
下面只能看看代码了:
package com.lenovo.networkswitch;import android.app.PendingIntent;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.telephony.MSimTelephonyManager;import android.telephony.TelephonyManager;import android.util.Log;import android.content.ComponentName;import android.content.ContentResolver;import android.content.ContentValues;import android.content.Context;import android.content.Intent;import android.database.Cursor;import android.net.Uri;import android.widget.RemoteViews;import android.widget.Toast;/** * * @author dong xt 2012.3.17 * Funtion : NetworkSwitch toggle * */public class NetworkSwitchWidgetProvider extends AppWidgetProvider {private static final String CLICK_NAME_ACTION = "com.xxx.action.widget.click";private static final String NETWORK_STATE_CHANGED = "com.xxx.action.widget.network.changed";public static final String PREFERRED_APN_URI = "content://telephony/carriers/preferapn";private static final Uri PREFERAPN_URI = Uri.parse(PREFERRED_APN_URI); private static RemoteViews remoteViews;private static final int ID_INDEX = 0;public static final String APN_ID = "apn_id";private static final String WAP = "389";private static final String NET = "388";private static String mSelectedKey;@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {// TODO Auto-generated method stubfinal int N = appWidgetIds.length;for (int i = 0; i < N; i++) {int appWidgetId = appWidgetIds[i];updateAppWidget(context, appWidgetManager, appWidgetId);}}@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubsuper.onReceive(context, intent);if (remoteViews == null) {remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);}mSelectedKey = getSelectedApnKey(context);if (intent.getAction().equals(CLICK_NAME_ACTION)) {if ((mSelectedKey != null) && mSelectedKey.equals(NET)) {setSelectedApnKey(WAP,context);remoteViews.setImageViewResource(R.id.newwork_switch, R.drawable.wap_network);} else if ((mSelectedKey != null) && mSelectedKey.equals(WAP)){setSelectedApnKey(NET,context);remoteViews.setImageViewResource(R.id.newwork_switch, R.drawable.net_network);}}else if(intent.getAction().equals(NETWORK_STATE_CHANGED)){remoteViewsSetImageView(context);}elseif(mSelectedKey == null || (!mSelectedKey.equals(NET) && !mSelectedKey.equals(WAP))){remoteViews.setImageViewResource(R.id.newwork_switch, R.drawable.disable);Toast.makeText(context, "网络切换不可用,请检查电话卡", Toast.LENGTH_SHORT).show();}AppWidgetManager appWidgetManger = AppWidgetManager.getInstance(context);int[] appIds = appWidgetManger.getAppWidgetIds(new ComponentName(context, NetworkSwitchWidgetProvider.class));appWidgetManger.updateAppWidget(appIds, remoteViews);}public void updateAppWidget(Context context,AppWidgetManager appWidgeManger, int appWidgetId) {remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);MSimTelephonyManager mTelephonyManager = (MSimTelephonyManager)context.getSystemService(Context.MSIM_TELEPHONY_SERVICE);if(mTelephonyManager.getSimState(0) != mTelephonyManager.SIM_STATE_READY){remoteViews.setImageViewResource(R.id.newwork_switch, R.drawable.disable);}else{remoteViewsSetImageView(context);Intent intentclick = new Intent();ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.ApnSettings");intentclick.putExtra("subscription", 0);intentclick.setComponent(cn);PendingIntent pendingIntent = PendingIntent.getActivity(context, 0 /* no requestCode */, intentclick, 0 /* no flags */);remoteViews.setOnClickPendingIntent(R.id.newwork_switch, pendingIntent);}/*remoteViewsSetImageView(context);Intent intentClick = new Intent();intentClick.setAction(CLICK_NAME_ACTION);PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,intentClick, 0);remoteViews.setOnClickPendingIntent(R.id.newwork_switch, pendingIntent);*/appWidgeManger.updateAppWidget(appWidgetId, remoteViews);}private void setSelectedApnKey(String key,Context context) { mSelectedKey = key; ContentResolver resolver = context.getContentResolver(); ContentValues values = new ContentValues(); values.put(APN_ID, mSelectedKey); resolver.update(PREFERAPN_URI, values, null, null); }private void remoteViewsSetImageView(Context context){mSelectedKey = getSelectedApnKey(context);if ((mSelectedKey != null) && mSelectedKey.equals(WAP)) {remoteViews.setImageViewResource(R.id.newwork_switch, R.drawable.wap_network);} else if ((mSelectedKey != null) && mSelectedKey.equals(NET)){remoteViews.setImageViewResource(R.id.newwork_switch, R.drawable.net_network);}elseif(mSelectedKey == null || (!mSelectedKey.equals(NET) && !mSelectedKey.equals(WAP))){remoteViews.setImageViewResource(R.id.newwork_switch, R.drawable.disable);}}private String getSelectedApnKey(Context context) { String key = null; Cursor cursor = context.getContentResolver().query(PREFERAPN_URI, new String[] {"_id"}, null, null, "name ASC");if(cursor.getCount() > 0){cursor.moveToFirst();key = cursor.getString(ID_INDEX);}cursor.close(); return key; }}
更多相关文章
- FileObserver的使用
- INSTALL_FAILED_TEST_ONLY
- RN: android 显示 gif compile 'com.facebook.fresco:fresco
- 据说年薪30万的Android程序员必须知道事
- Android(安卓)的系统属性(SystemProperties)设置分析
- Qt for Android(安卓)使用 手记
- [转]Android读取assets目录下的资源
- Android(安卓)-- NDK开发入门
- Android调试错误-No resource identifier found for attribute '