一个切换的Widget

QT实战——界面切换 QT简单的实现按钮进行界面切换 阅读详情

因为是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;
	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {
		// TODO Auto-generated method stub
		final int N = appWidgetIds.length;
		for (int i = 0; i < N; i++) {
			int appWidgetId = appWidgetIds[i];
			updateAppWidget(context, appWidgetManager, appWidgetId);
		}
	}

	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		super.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);
		}else
			if(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);
		}else
			if(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;
	 }
}


Android一键控制网络开关 Widget开发实战 Android Widget是Android系统中的小工具组件,允许用户在主屏幕上快速访问应用程序的小型片段,提供了丰富的信息预览和直接的交互方式。开发者可以使用Widget来展示应用数据,如动态内容和实时信息,无需打开应用程序本身,从而提升用户体验。Widget在功能上可以分为两类:静态的和动态的。静态Widget在创建后一般不会更新,而动态Widget则可以通过定义的更新机制定时更新界面元素。在本章中,我们将概述Widget的基本概念,包括它的优势、设计原则和创建流程。 阅读详情

相关推荐

RK3568 NFS rootfs配置与调试实战指南(已验证)

本文提供了在RK3568开发板上配置NFS rootfs的完整实战指南。通过详细步骤讲解如何配置uboot的bootargs参数、编译支持NFS的内核,并在PC端搭建TFTP与NFS服务器,最终实现从网络挂载根文件系统,从而极大提升驱动调试和应用程序开发的迭代效率。

weixin_29175469的博客 282

Android UI控件系列:TabWidget(切换卡)

Tab选项卡类似与电话本的界面,通过多个标签切换不同的内容,要实现这个效果,首先要知道TabHost,它是一个用来存放多个Tab标签的容器,每一个Tab都可以对应自己的布局,比如,电话本中的Tab布局就是一个线性布局 要使用TabHost,首先要通过getTabHost方法获取TabHost的对象,然后通过addTab方法来向TabHost中添加Tab,当然每个Tab在切换时都会产生一个事件

u013244517的专栏 590

从波士顿动力SpotMini拆解看四足机器人机械设计:关节布局与电机选型的5个关键决策点

本文深入解析波士顿动力SpotMini四足机器人的机械设计,聚焦关节布局与电机选型的5个关键决策点。通过拆解髋关节偏移距、膝关节传动链、电机热管理等核心设计,揭示商业级四足机器人的工程智慧,为工业巡检、物流机器人等应用提供实用参考。

postgres8guard的博客 896

Android AppWidget控制手机上网APN接入点

首先很有必要讲一下需求,由于搞IT的加班比较多,每天回家基本上都是8点之后,电信网络又贵,无奈我屌丝一个用网时间又少,索性在淘宝上花重金购置了一张1元5小时的上网卡,貌似是广东电信的绝版卡,在广东省内上网5小时一分钱,但是接入点要是CTWAP,否则上网就是1小时3块钱了。用久了发现了一个弊端:网络不好的时候手机会自动切换APN接入点,刚开始的时候我是下载一个了HIAPN的软件,这个软件提供一个桌面

小码农大梦想 1891

Calibre LVS错误排查实战:从Innovus到GDS的完整调试流程(附常见错误解析)

本文详细介绍了数字IC后端设计中,从Innovus工具输出数据到Calibre LVS物理验证的完整调试流程。文章系统性地讲解了LVS错误排查的方法论,包括报告解读、图形化定位以及针对器件不匹配、电源网络错误、短路开路等常见问题的深度解析与解决方案,旨在帮助工程师高效完成版图与原理图的一致性检查。

weixin_29218963的博客 776

一种基于OpenPose和DNN的跌倒检测软件系统(中文&英文)

学习并实现一种跌倒检测模型,此模型基于OpenPose实现逐帧人体姿态检测,使用DNN识别人体动作。检测方式有在线与离线两种,本文主要测试了离线模式,测试效果较好。

Tongzhou_Li的博客 2645

一步步教你如何使用Android自定义权限。

在Android开发的过程中我们少不了要与权限打交道,在这过程中我们自然会想:为什么有些操作需要权限,有些操作不需要呢?系统是怎么配置操作所需要的权限呢?带着这些问题,我们来分析一个常见的操作——打电话。事例代码如下:CallActivity.java:public class CallActivity extends AppCompatActivity { @Override pro

mikechenmj的博客 1万+

切比雪夫插值

切比雪夫插值是一种基于切比雪夫节点的多项式插值方法,其优势是减少插值误差(特别是龙格现象:表现为高维插值时在边缘处插值误差骤增)。本文对其基本操作进行说明。

平和少年的博客 1647

Android实现多个按钮切换,android实现点击按钮切换不同的fragment布局

本文实例为大家分享了android点击按钮切换不同布局的具体代码,供大家参考,具体内容如下先上效果图:如图所示,实现点击下面的按钮切换不同的fragment布局;不说了,先上主MainActivity代码:MainActivity.java:package com.example.xh.twostylefragment;import android.content.Intent;import an...

weixin_30845893的博客 2112

MIKE21桥墩模拟实战:抠网格与构筑物法对比与选型指南

本文详细对比了MIKE21软件中抠网格法与构筑物法在桥墩模拟中的应用,包括操作步骤、适用场景及优缺点分析。通过实际案例数据展示两种方法的精度与效率差异,并提供选型决策树和常见问题解决方案,帮助工程师根据项目需求选择最优模拟方法。

weixin_42656416的博客 324

【数据集】1980-2020年(5年)土地利用分类数据-中国科学院

简介1980-2020年每五年土地利用数据-中国科学院

WW、forever的博客 3934

Android中的切换卡TabWidget布局简介

切换卡由TabHost作为根元素,包含TabWidget和FrameLayout两个子元素,TabWidget表示切换卡中的点击标签,FrameLayout(帧布局)中包含切换卡中需要显示的内容,所有想要显示的不同内容都放在同一个帧布局中。其中TabHost、TabWidget、FrameLayout必须为它们指定Android预设的id:tabhost,tabs,tabcontent(很奇怪的设

QuietShake的博客 1084

用 PERFORM ... ON COMMIT / ON ROLLBACK 把收尾工作做干净:从 SAP LUW 到 Update Task 的事务钩子实践

ABAP事务钩子机制解析 本文深入探讨SAP ABAP开发中的事务边界管理问题,重点分析PERFORM ... ON COMMIT/ROLLBACK机制: 事务分层:区分Database LUW(数据库提交)和SAP LUW(业务逻辑单元),后者通过COMMIT WORK触发多种收尾动作 钩子机制:PERFORM...ON COMMIT将子程序注册为事务结束回调,在提交/回滚时执行清理工作而非业务更新 执行顺序:钩子程序先于Update Task执行,仍保留当前会话内存上下文 现代实践:建议将FORM仅作为

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3999

Tip17 验证Qt中一个布局是否可以在多个Widget中切换问题

动态的将某个布局从一个QWidget切换到另一个QWidget

Snow__Sunny的博客 770

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

UE4笔记:利用Widget设计一个切换材质功能

UE4引擎中的Widget蓝图是一个重要的工具,可用于场景中的页面叠加,镜头绑定,场景切换等多处地方,在这里笔者介绍一种利用控件蓝图和场景中物体进行信息交互的方法,直观的体现就是进行物体的材质切换。 1.创建控件蓝图 控件蓝图不同于一般的逻辑蓝图,主要表现在其需要进行画面的设计和平铺。在内容浏览器中创建一个控件蓝图,命名为SwitchMat_UI 双击打开控件蓝图编辑器,进行页...

dianjutuo0939的博客 1159

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

QT在一个widget中点击选项卡切换界面

使用到的类和头文件: #include &lt;qstackedwidget.h&gt; #include &lt;qlistwidget.h&gt; #include &lt;qstringlist.h&gt; //额外记录:固定图片大小 Qpixmap(url).scaled(); //创建列表 QListWidget *m_pListW = new QListWidge...

weixin_40273809的博客 4211

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Flutter Widget -- DefaultTabController【需要在一个区域内切换显示不同内容,且每个内容都有对应的标题标签时】

当需要在一个区域内切换显示不同内容,且每个内容都有对应的标题标签时,就应该想到 DefaultTabController + TabBar + TabBarView 这个组合。就像浏览器标签页:顶部是标签栏(TabBar):显示"百度"、“谷歌”、“必应”下面是内容区(TabBarView):显示对应的网页点击标签,内容随之切换遇到以下需求时,就应该想到 Tab 组件:📌 “分页显示”📌 “标签切换”📌 “Tab 页”📌 “分类浏览”📌 “顶部导航栏”

m0_61213907的博客 1872

QT 通过QStackedWidget嵌套(切换)子页面 在主窗口中切换子页面

新建一个Widget窗口,作为主窗口 在这个窗口中,放入一个QPushButton 和 QStackedWidget。 QPushButton名字是change;QStackedWidget名字是page 新建两个子页面widget 名字分别是a和 b 创建过程:右键项目,添加新文件,然后按照下面的图去选择 然后设计界面a 和 界面b 胡乱拖了几个控件 布局了一下 --根据实际需求来 5.然后编写主窗口代码 Widget.h #ifndef WIDGET_H #defin.

weixin_49035356的博客 4795

Android动画效果Widget(飞行模式)

1. 功能:   创建Widget后,若为飞行模式,点击Widget,取消飞行模式,否则设置为飞行模式。在变化过程中有动画效果。   2. 实现思想: 对应main.xml布局文件,Widget由三张图片组成,pane上层左边为airplane,右边为switch点击桌面widget时图标的时候,左边airplane四张图标动态的在切换,直到设置为飞行模式或者取消飞行

hsyouxishe的专栏 1723

QT——基于 QListWidget 和 QStackedWidget 的页面切换

Qt 练习题:基于 QListWidget 和 QStackedWidget 的页面切换题目描述:请使用 Qt 设计一个窗口,其中包含一个 QListWidget 和一个 QStackedWidget。要求实现以下功能:当用户双击 QListWidget 中的某一项时,QStackedWidget 切换到对应的页面(索引相同)。当 QStackedWidget 页面发生切换时,在控制台输出当前页面的索引值。

weixin_56261190的博客 655

QT在widget设置一个按钮,按下按钮转到mainwindow窗口

QT在widget设置一个按钮,按下按钮转到mainwindow窗口 新建一个QT widget项目 右键这里 选择添加新文件(Add New…) 选择设计师界面类 MainWindow 点widget.ui放一个按钮 右键按钮,转到槽,选择这个 在里面写上 this->close(); MainWindow *pic = new MainWindow; pic->show(); 就可以了 新手qt开发 欢迎指出错误! ...

qhy1314520的博客 3872

widget中自动横竖屏切换时的问题

首页Android开发者社区Android百科极客学院 开启辅助访问打卡签到我要上头条如何赚e币注册验证问题版主申请切换到宽版 帐号 自动登录  找回密码 密码 登录  加入eoe 只需一步,快速开始  

yangaiyu的博客 1308

通过widget来实现手机响铃模式的切换

转载请注明出处,谢谢! 最近入了一部Neuxs 5,昨天因为开会的时候手机经常收到短信,想静音按音量键关的确是媒体音量!在通知栏里也找不到快速切换按钮。于是萌生了自己写一个桌面widget来快速切换响铃模式的想法。 首先,要创建一个widget。网上搜了一下,方法很普遍。只要实现onUpdate方法,使用pendingIntent发送广播,本地再接收广播执行切换响铃模式即可。代

Jason的秘密花园 1627

动画实用教程 | Widget 的淡入淡出效果

大家好,近期我们会开始连载 Flutter 中文文档的 Cookbook 部分,中文我们称之为实用教程,总共分动画、设计、网络请求、数据库设计、插件和测试等 12 章,共...

Flutter 社区 1390

Flutter移动应用开发 - 02 第一个程序HelloWorld,包、依赖、widget介绍,词汇本实例实现

主要根据官网完成了HelloWorld程序,汇总了包、依赖、widget等flutter中的基本概念的介绍,最后根据所学完成了词汇本实例,具有单词生成、单词收藏和收藏夹功能。

如果没有躺赢的命,那就站起来奔跑,你的努力一定会对得起这一路的颠沛流离。 1710

Android Widget 设计与开发

<br /> <br />作者:徐建祥(netpirate@gmail.com)<br />时间: 2010/12/15<br />来自: http://www.anymobile.org<br /> <br />Widget杂谈:最早Widget是指在PC的桌面上的小窗口程序;Web上的先行者似乎是Yahoo!;当然,OPhone也搞了一套Widget,HTML+CSS的东东。<br /> <br />我们这里谈的所谓Widget,就是窗口小部件,Android SDK从1.5版本开始支持AppWidge

netpirate的专栏 4142
上一篇: 自定义Seekbar
下一篇: jar cvf xx.jar *.*
imdxt1986
博客等级 码龄16年 64粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值