23 展訊Sprd設定-電池-識別桌面小部件
阿新 • • 發佈:2018-11-26
1. 目的
appwidget 主要根據廣播進行傳遞,如果攔截了會影響小部件的資料更新,一般通過下面的action傳遞事件,即不能進行攔截
android.appwidget.action.APPWIDGET_ENABLED
android.appwidget.action.APPWIDGET_UPDATE
android.appwidget.action.APPWIDGET_DELETED
2. 攔截桌面小部件
if (intent != null && "android".equals(callerApp)) { String action = intent.getAction(); if (action != null && action.startsWith("android.appwidget.action.")) //AppWidget action return true; }
3. 應用層識別
3.1 獲取所有的桌面小部件
public static HashMap<String, ArrayList<String>> getAppWidgetList(Context mContext) { HashMap<String, ArrayList<String>> result = new HashMap<String, ArrayList<String>>(); AppWidgetManager mAppWidgetManager = AppWidgetManager.getInstance(mContext); List<AppWidgetProviderInfo> providers = mAppWidgetManager.getInstalledProviders(); if (providers != null && !providers.isEmpty()) { for (AppWidgetProviderInfo info : providers) { ComponentName cpName = info.provider; String packageName = cpName.getPackageName(); String className = cpName.getClassName(); if (result != null && result.containsKey(packageName)) { result.get(packageName).add(className); Log.d(TAG, "getAppWidgetList append packageName = " + packageName + ", className = " + className); } else { ArrayList<String> classNameList = new ArrayList<>(); classNameList.add(className); result.put(packageName, classNameList); Log.d(TAG, "getAppWidgetList add packageName = " + packageName + ", className = " + className); } } } return result; }
3.2 獲取luncher資料庫中的桌面小部件
/** * @param context * @return <uses-permission * android:name="com.android.launcher3.permission.READ_SETTINGS"/> */ public static Map<String, String> getLauncher3WidgetInfo(Context context) { final Uri widgetUri = Uri.parse("content://" + "com.android.launcher3.settings" + "/" + "favorites"); Cursor cursor = null; Map<String, String> widgetList = new HashMap<String, String>(); try { cursor = context.getContentResolver().query(widgetUri, new String[]{"itemType", "appWidgetProvider"}, "itemType" + "=?", new String[]{"4"}, null); if (cursor != null) { while (cursor.moveToNext()) { String appWidgetProvider = cursor.getString(cursor.getColumnIndex("appWidgetProvider")); String packageName = appWidgetProvider.split("/")[0]; if (widgetList != null && widgetList.containsKey(packageName)) { // do nothing } else { widgetList.put(packageName, packageName); } } } } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); cursor = null; } } return widgetList; }