背景:開啟懸浮窗,當(dāng)app進(jìn)入后臺后,點擊懸浮窗進(jìn)入固定頁面
問題:當(dāng)app在后臺運(yùn)行時,點擊懸浮窗,以下代碼不能拉起app,經(jīng)排查,部門手機(jī)需要開啟后臺彈出界面權(quán)限
val intent = Intent(context, PhoneMainActivity::class.java)
intent.putExtra(MESSAGE_TYPE, pushMessageVO.type)
intent.putExtra(JUMP, true)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)
如圖?
不同的機(jī)型這個權(quán)限的名稱也不相同,要開啟此權(quán)限,要跳轉(zhuǎn)的界面也不同,所以需要獲取不同機(jī)型的此頁面路徑
獲取權(quán)限頁面路徑過程如下,測試機(jī)型:vivo X21A
1. 獲取連接設(shè)備名
adb devices
2. 手機(jī)打開需要獲取權(quán)限的頁面,用以下命令獲取路徑
adb -s 設(shè)備名 shell dumpsys activity activities
?如此,便結(jié)束了文章來源:http://www.zghlxwxcb.cn/news/detail-672926.html
附不同廠商跳轉(zhuǎn)后臺彈出界面,自啟動,加入白名單,電池優(yōu)化的工具類文章來源地址http://www.zghlxwxcb.cn/news/detail-672926.html
import android.Manifest;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.PowerManager;
import android.provider.Settings;
import android.util.Log;
import androidx.annotation.IntRange;
import androidx.annotation.RequiresApi;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.allqj.basic_lib.BasicLib;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class PermissionUtil {
public static int IGNORE_BATTERY_CODE = 1880;
private static LinkedHashMap<String, List<String>> autoStartHashMap = new LinkedHashMap<String, List<String>>() {
{
put("XIAOMI", Arrays.asList(
"com.miui.securitycenter/com.miui.appmanager.ApplicationsDetailsActivity",
"com.miui.securitycenter/com.miui.permcenter.autostart.AutoStartManagementActivity",
"com.miui.securitycenter"
));
put("HUAWEI", Arrays.asList(
"com.huawei.systemmanager/.appcontrol.activity.StartupAppControlActivity",
"com.huawei.systemmanager/.startupmgr.ui.StartupNormalAppListActivity",
"com.huawei.systemmanager/.optimize.process.ProtectActivity",
"com.huawei.systemmanager/.optimize.bootstart.BootStartActivity",
"com.huawei.systemmanager"
));
// 榮耀
put("HONOR", Arrays.asList(
"com.hihonor.systemmanager/.appcontrol.activity.StartupAppControlActivity",
"com.hihonor.systemmanager/.startupmgr.ui.StartupNormalAppListActivity",
"com.hihonor.systemmanager"
));
put("VIVO", Arrays.asList(
"com.vivo.permissionmanager/.activity.SoftPermissionDetailActivity",
"com.vivo.permissionmanager/.activity.BgStartUpManagerActivity",
"com.vivo.permissionmanager/.activity.PurviewTabActivity",
"com.iqoo.secure/.ui.phoneoptimize.BgStartUpManager",
"com.iqoo.secure/.safeguard.PurviewTabActivity",
// "com.iqoo.secure/.ui.phoneoptimize.AddWhiteListActivity", //這是白名單, 不是自啟動
"com.vivo.permissionmanager",
"com.iqoo.secure"
));
put("OPPO", Arrays.asList(
"com.android.settings/com.oplus.settings.feature.homepage.OplusSettingsHomepageActivity",
"com.android.settings/com.oplus.settings.OplusSubSettings",
"com.android.settings/com.android.settings.SubSettings",
"com.oplus.safecenter/.startupapp.view.StartupAppListActivity",
"com.coloros.safecenter/.startupapp.StartupAppListActivity",
"com.coloros.safecenter/.permission.startup.StartupAppListActivity",
"com.oppo.safe/.permission.startup.StartupAppListActivity",
"com.coloros.oppoguardelf/com.coloros.powermanager.fuelgaue.PowerUsageModelActivity",
"com.coloros.safecenter/com.coloros.privacypermissionsentry.PermissionTopActivity",
"com.coloros.safecenter",
"com.oppo.safe",
"com.coloros.oppoguardelf"
));
put("MEIZU", Arrays.asList(
"com.meizu.safe/.permission.SmartBGActivity",
"com.meizu.safe/.permission.PermissionMainActivity",
"com.meizu.safe"
));
put("SAMSUNG", Arrays.asList(
"com.samsung.android.sm_cn/com.samsung.android.sm.ui.ram.AutoRunActivity",
"com.samsung.android.sm_cn/com.samsung.android.sm.ui.appmanagement.AppManagementActivity",
"com.samsung.android.sm_cn/com.samsung.android.sm.ui.cstyleboard.SmartManagerDashBoardActivity",
"com.samsung.android.sm_cn/.ui.ram.RamActivity",
"com.samsung.android.sm_cn/.app.dashboard.SmartManagerDashBoardActivity",
"com.samsung.android.sm/com.samsung.android.sm.ui.ram.AutoRunActivity",
"com.samsung.android.sm/com.samsung.android.sm.ui.appmanagement.AppManagementActivity",
"com.samsung.android.sm/com.samsung.android.sm.ui.cstyleboard.SmartManagerDashBoardActivity",
"com.samsung.android.sm/.ui.ram.RamActivity",
"com.samsung.android.sm/.app.dashboard.SmartManagerDashBoardActivity",
"com.samsung.android.lool/com.samsung.android.sm.ui.battery.BatteryActivity",
"com.samsung.android.sm_cn",
"com.samsung.android.sm"
));
put("ONEPLUS", Arrays.asList(
"com.oneplus.security/.chainlaunch.view.ChainLaunchAppListActivity",
"com.oneplus.security"
));
put("LETV", Arrays.asList(
"com.letv.android.letvsafe/.AutobootManageActivity",
"com.letv.android.letvsafe/.BackgroundAppManageActivity",
"com.letv.android.letvsafe"
));
put("ZTE", Arrays.asList(
"com.zte.heartyservice/.autorun.AppAutoRunManager",
"com.zte.heartyservice"
));
//金立
put("F", Arrays.asList(
"com.gionee.softmanager/.MainActivity",
"com.gionee.softmanager"
));
//以下為未確定(廠商名也不確定)
put("SMARTISANOS", Arrays.asList(
"com.smartisanos.security/.invokeHistory.InvokeHistoryActivity",
"com.smartisanos.security"
));
//360
put("360", Arrays.asList(
"com.yulong.android.coolsafe/.ui.activity.autorun.AutoRunListActivity",
"com.yulong.android.coolsafe"
));
//360
put("ULONG", Arrays.asList(
"com.yulong.android.coolsafe/.ui.activity.autorun.AutoRunListActivity",
"com.yulong.android.coolsafe"
));
//酷派
put("COOLPAD"/*廠商名稱不確定是否正確*/, Arrays.asList(
"com.yulong.android.security/com.yulong.android.seccenter.tabbarmain",
"com.yulong.android.security"
));
//聯(lián)想
put("LENOVO"/*廠商名稱不確定是否正確*/, Arrays.asList(
"com.lenovo.security/.purebackground.PureBackgroundActivity",
"com.lenovo.security"
));
put("HTC"/*廠商名稱不確定是否正確*/, Arrays.asList(
"com.htc.pitroad/.landingpage.activity.LandingPageActivity",
"com.htc.pitroad"
));
//華碩
put("ASUS"/*廠商名稱不確定是否正確*/, Arrays.asList(
"com.asus.mobilemanager/.MainActivity",
"com.asus.mobilemanager"
));
//酷派
put("YULONG", Arrays.asList(
"com.yulong.android.softmanager/.SpeedupActivity",
"com.yulong.android.security/com.yulong.android.seccenter.tabbarmain",
"com.yulong.android.security"
));
}
};
private static LinkedHashMap<String, List<String>> bgPopHashMap = new LinkedHashMap<String, List<String>>() {
{
put("XIAOMI", Arrays.asList(
"com.miui.securitycenter/com.miui.permcenter.permissions.PermissionsEditorActivity",
"com.miui.securitycenter/com.miui.appmanager.ApplicationsDetailsActivity",
"com.miui.securitycenter"
));
put("HUAWEI", Arrays.asList(
"com.huawei.systemmanager/.appcontrol.activity.StartupAppControlActivity",
"com.huawei.systemmanager"
));
// 榮耀
put("HONOR", Arrays.asList(
"com.hihonor.systemmanager/.appcontrol.activity.StartupAppControlActivity",
"com.hihonor.systemmanager/.startupmgr.ui.StartupNormalAppListActivity",
"com.hihonor.systemmanager"
));
put("VIVO", Arrays.asList(
"com.vivo.permissionmanager/.activity.StartBgActivityControlActivity",//需要com.vivo.permission.manage.permission.ACCESS權(quán)限
"com.vivo.permissionmanager/.activity.SoftPermissionDetailActivity",
"com.vivo.permissionmanager/.activity.PurviewTabActivity",
"com.vivo.permissionmanager",
"com.iqoo.secure"
));
put("MEIZU", Arrays.asList(
"com.meizu.safe/.permission.PermissionMainActivity",
"com.meizu.safe"
));
put("OPPO", Arrays.asList(
"com.oplus.battery/com.oplus.powermanager.fuelgaue.PowerControlActivity",//not exported
"com.android.settings/com.oplus.settings.OplusSubSettings",
"com.android.settings/com.android.settings.SubSettings",
"com.coloros.oppoguardelf/com.coloros.powermanager.fuelgaue.PowerUsageModelActivity",
"com.coloros.safecenter/com.coloros.privacypermissionsentry.PermissionTopActivity",
"com.coloros.safecenter",
"com.oppo.safe",
"com.coloros.oppoguardelf"
));
put("SAMSUNG", Arrays.asList(
"com.samsung.android.lool",
"com.samsung.android.sm_cn",
"com.samsung.android.sm"
));
put("ONEPLUS", Arrays.asList(
"com.oneplus.security/.chainlaunch.view.ChainLaunchAppListActivity",
"com.oneplus.security"
));
put("LETV", Arrays.asList(
"com.letv.android.letvsafe/.AutobootManageActivity",
"com.letv.android.letvsafe/.BackgroundAppManageActivity",
"com.letv.android.letvsafe"
));
put("ZTE", Arrays.asList(
"com.zte.heartyservice"
));
//金立
put("F", Arrays.asList(
"com.gionee.softmanager/.MainActivity",
"com.gionee.softmanager"
));
//以下為未確定(廠商名也不確定)
put("SMARTISANOS", Arrays.asList(
"com.smartisanos.security/.invokeHistory.InvokeHistoryActivity",
"com.smartisanos.security"
));
//360
put("360", Arrays.asList(
"com.yulong.android.coolsafe"
));
//360
put("ULONG", Arrays.asList(
"com.yulong.android.coolsafe"
));
//酷派
put("COOLPAD"/*廠商名稱不確定是否正確*/, Arrays.asList(
"com.yulong.android.security/com.yulong.android.seccenter.tabbarmain",
"com.yulong.android.security"
));
//聯(lián)想
put("LENOVO"/*廠商名稱不確定是否正確*/, Arrays.asList(
"com.lenovo.security/.purebackground.PureBackgroundActivity",
"com.lenovo.security"
));
put("HTC"/*廠商名稱不確定是否正確*/, Arrays.asList(
"com.htc.pitroad/.landingpage.activity.LandingPageActivity",
"com.htc.pitroad"
));
//華碩
put("ASUS"/*廠商名稱不確定是否正確*/, Arrays.asList(
"com.asus.mobilemanager/.MainActivity",
"com.asus.mobilemanager"
));
//酷派
put("YULONG", Arrays.asList(
"com.yulong.android.softmanager/.SpeedupActivity",
"com.yulong.android.security/com.yulong.android.seccenter.tabbarmain",
"com.yulong.android.security"
));
}
};
private static LinkedHashMap<String, List<String>> powerSavingHashMap = new LinkedHashMap<String, List<String>>() {
{
put("XIAOMI", Arrays.asList(
"com.miui.powerkeeper/.ui.HiddenAppsConfigActivity",
"com.miui.securitycenter/com.miui.appmanager.ApplicationsDetailsActivity",
"com.miui.powerkeeper",
"com.miui.securitycenter"
));
put("HUAWEI", Arrays.asList(
"com.android.settings/.Settings$HighPowerApplicationsActivity",
"com.android.settings"
));
// 榮耀
put("HONOR", Arrays.asList(
"com.hihonor.systemmanager/.power.ui.HwPowerManagerActivity",
"com.hihonor.systemmanager"
));
put("VIVO", Arrays.asList(
"com.vivo.abe/com.vivo.applicationbehaviorengine.ui.ExcessivePowerManagerActivity",
"com.iqoo.powersaving/.PowerSavingManagerActivity",
"com.iqoo.powersaving"
));
put("OPPO", Arrays.asList(
"com.oplus.battery/com.oplus.powermanager.fuelgaue.PowerControlActivity",//not exported
"com.android.settings/com.oplus.settings.OplusSubSettings",
"com.android.settings/com.android.settings.SubSettings",
"com.coloros.oppoguardelf/com.coloros.powermanager.fuelgaue.PowerConsumptionActivity",
"com.coloros.oppoguardelf"
));
}
};
public static void startToPermissionSetting(Context context, String type) {
Log.d("Util", "******************當(dāng)前手機(jī)型號為:" + Build.MANUFACTURER);
LinkedHashMap<String, List<String>> permissionMap = new LinkedHashMap<>();
if ("autoStart".equals(type)) {
permissionMap = autoStartHashMap;
} else if ("powerSaving".equals(type)) {
permissionMap = powerSavingHashMap;
} else if ("bgPop".equals(type)) {
permissionMap = bgPopHashMap;
}
if (!permissionMap.keySet().contains(Build.MANUFACTURER.toUpperCase())){
Intent intent = new Intent(Settings.ACTION_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
return;
}
for (Map.Entry<String, List<String>> entry : permissionMap.entrySet()) {
String manufacturer = entry.getKey();
List<String> actCompatList = entry.getValue();
if (Build.MANUFACTURER.equalsIgnoreCase(manufacturer)) {
for (String act : actCompatList) {
try {
Intent intent;
if (act.contains("/")) {
Log.d("Util", "******************act為:" + act);
intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName componentName = ComponentName.unflattenFromString(act);
intent.setComponent(componentName);
intent.putExtra("packagename", context.getPackageName());//vivo-SoftPermissionDetailActivity
intent.putExtra("extra_pkgname", context.getPackageName());//xiaomi-PermissionsEditorActivity
intent.putExtra("package_name", context.getPackageName());//xiaomi-ApplicationsDetailsActivity
} else {
//所以我是直接跳轉(zhuǎn)到對應(yīng)的安全管家/安全中心
intent = context.getPackageManager().getLaunchIntentForPackage(act);
}
context.startActivity(intent);
break;
} catch (Exception e) {
e.printStackTrace();
Intent intent = new Intent(Settings.ACTION_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
}
}
}
public static boolean isIgnoringBatteryOptimizations(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (powerManager != null) {
return powerManager.isIgnoringBatteryOptimizations(context.getPackageName());
} else {
return false;
}
} else {
return true;
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
public static void requestIgnoreBatteryOptimizations(Activity context) {
try {
Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + context.getPackageName()));
context.startActivityForResult(intent, IGNORE_BATTERY_CODE);
} catch (Exception e) {
e.printStackTrace();
}
}
}
到了這里,關(guān)于Android 點擊懸浮窗后臺啟動Activity問題及方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!