android中activity.this跟getApplicationContext的区别

本文详细解释了Android中Context的不同类型及其使用场景,重点对比了Activity.this与getApplicationContext的区别,并提供了关于何时使用何种Context的指导。

转载: http://www.myexception.cn/android/1968332.html

android中activity.this和getApplicationContext的区别

在android中常常会遇到与context有关的内容

浅论一下context : 在语句 AlertDialog.Builder builder = new AlertDialog.Builder(this); 中,要求传递的 参数就是一个context,在这里我们传入的是this,那么这个this究竟指的是什么东东呢? 这里的this指的是Activity.this,是这个语句所在的Activity的this,是这个Activity 的上下文。网上有很多朋友在这里传入this.getApplicationContext(),这是不对的。 AlertDialog对象是依赖于一个View的,而View是和一个Activity对应的。 于是,这里涉及到一个生命周期的问题,this.getApplicationContext()取的是这个应 用程序的Context,Activity.this取的是这个Activity的Context,这两者的生命周期是不同 的,前者的生命周期是整个应用,后者的生命周期只是它所在的Activity。而AlertDialog应 该是属于一个Activity的,在Activity销毁的时候它也就销毁了,不会再存在;但是,如果传 入this.getApplicationContext(),就表示它的生命周期是整个应用程序,这显然超过了它 的生命周期了,而且不能判定这个dialog属于哪一个activity(AlertDialog属于Activity的一部分),所以程序会报错,"anndroid.view.WindowManager$BadTokenException:unable to add window - -token null is not for an application"提示不能添加窗口。 所以,在这里我们只能使用Activity的this。

 

下面介绍一下两者的区别

(1)对于getApplicationContext,我们可以假定它是一个父类,它属于整个应用程序共有,Activity.this可以假定为其的一个子类,该子类包含了一些特定的引用。所以,一般可以用getApplicationContext的地方都可以用特定的Activity.this代替。

(2)在生命周期上,通过getApplicationContext得到的上下文对象们只要当前的应用程序还存在,那么该对象就会一直存在,对于Activity.this上下文来说,只要当前的activity执行了onDestory方法,这个上下文对象就会一起被系统收回。

(3)在应用场景上,如果我们通过一个上下文对象来执行某个动作,且希望一直处于活跃状态,那么应该用getApplicationContext来获取上下文,如数据库的操作。此时,如果采用Activity.this,那么当前Activity调用onDestory方法时,数据库就会关闭,应用程序会产生错误。

 

 

getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁
Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁

getBaseContext()  返回由构造函数指定或setBaseContext()设置的上下文

 

总结:

1.dialog
dialog依附于activity存在,所以直接用XXXActivity.this就好,当activity消失的时候dialog也就销毁了
2.activity
上面我们已经说过了,直接使用XXXActivity.this,返回的是当前的activity实例,当前activity销毁时,一起销毁
3.service,broadcastReceiver
两者都可以
总结:和UI操作相关的不建议使用getApplicationContext(),一般都使用和activity相关的context,其余的操作,看具体情况,根据存在的生命周期的长度作出选择

如果是UI控件需要使用Activity作为Context对象,但是默认的Toast实际上使用ApplicationContext也可以
实际上,只要把握住一点,凡是跟UI相关的,都应该使用Activity做为Context来处理
可以看到Activity、Service、Application都是Context的子类

转载于:https://www.cnblogs.com/SZ2015/p/6884039.html

package com.XiaoLian; import adrt.ADRTLogCatReader; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.Process; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.XiaoLian.IPCCond.AIDLConnection; import com.XiaoLian.IPCCond.IPCService; import com.XiaoLian.ToolClass.FloatTool; import com.XiaoLian.ToolClass.SPUtils; import com.XiaoLian.ToolClass.fileUtil; import com.topjohnwu.superuser.ipc.RootService; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /* loaded from: classes.dex */ public class MainActivity extends Activity { private static MyAdapter adapter; static AlertDialog alertDialogs; static AlertDialog alertDialogs1; private static AlertDialog alertDialogss; public static Context context; private static AlertDialog dialog; static AlertDialog.Builder dialogs; static AlertDialog.Builder dialogs1; public static Context getContext; static LinearLayout linearLayouts; private static List<Map<String, Object>> list; private static ListView listView; private static Activity m_activity; private static TextView prog_text; private static ProgressBar progressBar; /* renamed from: 倒计时 reason: contains not printable characters */ private static TextView f0; /* renamed from: 窗口 reason: contains not printable characters */ private static View f3; /* renamed from: 读 reason: contains not printable characters */ private static EditText f4; private AlertDialog dialogsShow; private Handler handler = new Handler(this) { // from class: com.XiaoLian.MainActivity.100000009 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000009 r4) { return r4.this$0; } @Override // android.os.Handler public void handleMessage(Message message) { super.handleMessage(message); MainActivity.time--; MainActivity.f0.setText(new StringBuffer().append(new StringBuffer().append("倒计时 ").append(MainActivity.time).toString()).append(" 秒").toString()); if (MainActivity.time == 0) { MainActivity.dialog.dismiss(); this.this$0.handler.removeMessages(0); } this.this$0.handler.sendEmptyMessageDelayed(0, (long) 1000); } }; public Intent intent; /* renamed from: 卡密 reason: contains not printable characters */ private String f5; /* renamed from: 卡密内容 reason: contains not printable characters */ private String f6; static String wy_url = "https://wy.llua.cn"; static String WY_APPID = "61456"; static String WY_APPKEY = "tJY6OZR4KQ2PlwM9RWKPRh"; static String WY_RC4KEY = "lwM9RWKPRhGtJY6OZR4KQ2P"; /* renamed from: 当前版本号 reason: contains not printable characters */ static String f1 = "1.0"; /* renamed from: 登录判断 reason: contains not printable characters */ static boolean f2 = false; private static boolean init_win = false; private static int time = 1; public static boolean app_init_mode = false; public static boolean app_Operation_mode_root = false; @Override // android.app.Activity protected void onCreate(Bundle bundle) { ADRTLogCatReader.onContext(this, "com.aide.ui"); super.onCreate(bundle); requestWindowFeature(1); if (Build.VERSION.SDK_INT >= 23) { getWindow().getDecorView().setSystemUiVisibility(8192); } getWindow().setStatusBarColor(Color.parseColor("#E1F0F0F0")); requestPermission(); m1(); m_activity = this; getContext = this; SelectModeBox(this); } /* renamed from: 读取文件 reason: contains not printable characters */ public static String m0(String str) { String str2 = ""; try { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(str)), "UTF-8")); String str3 = null; while (true) { String readLine = bufferedReader.readLine(); if (readLine == null) { break; } str2 = new StringBuffer().append(str2).append(readLine).toString(); } } catch (Exception e) { e.printStackTrace(); } return str2; } /* renamed from: 储存权限 reason: contains not printable characters */ public void m1() { boolean z = true; if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE") != 0) { z = false; } if (checkSelfPermission("android.permission.READ_EXTERNAL_STORAGE") != 0) { z = false; } if (!z) { requestPermissions(new String[]{"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE"}, 102); } } } private void initMain() { f3.findViewById(R.id.go_app).setVisibility(8); loadDeploy(new Object[][]{new Object[]{"ROOT权限", new Runnable(this) { // from class: com.XiaoLian.MainActivity.100000002 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000002 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { if (MainActivity.app_Operation_mode_root && !Util.isRoot()) { new Handler(Looper.getMainLooper()).post(new Runnable(this) { // from class: com.XiaoLian.MainActivity.100000002.100000001 private final AnonymousClass100000002 this$0; { this.this$0 = r6; } static AnonymousClass100000002 access$0(AnonymousClass100000001 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { AlertDialog.Builder builder = new AlertDialog.Builder(AnonymousClass100000002.access$0(this.this$0)); builder.setTitle("提示"); builder.setMessage("无法获取ROOT权限,请检查您的设备是否已ROOT?"); builder.setCancelable(false); builder.setPositiveButton("确定", new DialogInterface.OnClickListener(this) { // from class: com.XiaoLian.MainActivity.100000002.100000001.100000000 private final AnonymousClass100000001 this$0; { this.this$0 = r6; } static AnonymousClass100000001 access$0(AnonymousClass100000000 r4) { return r4.this$0; } @Override // android.content.DialogInterface.OnClickListener public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); Process.killProcess(Process.myPid()); System.exit(0); } }); AlertDialog create = builder.create(); create.getWindow().setType(2038); create.show(); } }); try { Thread.sleep((long) 999999999); } catch (InterruptedException e) { e.printStackTrace(); } } } }}, new Object[]{"悬浮窗权限", new Runnable(this) { // from class: com.XiaoLian.MainActivity.100000003 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000003 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { for (int i = 0; i < 5 && !Settings.canDrawOverlays(this.this$0); i++) { Util.runShell(new StringBuffer().append(new StringBuffer().append("appops set --uid ").append(this.this$0.getPackageName()).toString()).append(" android:system_alert_window allow").toString(), true); try { Thread.sleep((long) 250); } catch (InterruptedException e) { e.printStackTrace(); } } if (!Settings.canDrawOverlays(this.this$0)) { this.this$0.startActivityForResult(new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse(new StringBuffer().append("package:").append(this.this$0.getPackageName()).toString())), 4444); } while (!Settings.canDrawOverlays(this.this$0)) { try { Thread.sleep((long) 750); } catch (InterruptedException e2) { e2.printStackTrace(); } } } }}, new Object[]{"连接服务", new Runnable(this) { // from class: com.XiaoLian.MainActivity.100000005 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000005 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { while (!IPCService.isConnect() && MainActivity.app_Operation_mode_root) { try { Thread.sleep((long) 1000); } catch (InterruptedException e) { e.printStackTrace(); } } this.this$0.runOnUiThread(new Runnable(this) { // from class: com.XiaoLian.MainActivity.100000005.100000004 private final AnonymousClass100000005 this$0; { this.this$0 = r6; } static AnonymousClass100000005 access$0(AnonymousClass100000004 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { AnonymousClass100000005.access$0(this.this$0).handler.sendEmptyMessageDelayed(0, (long) 1000); MainActivity.f3.findViewById(R.id.go_app).setVisibility(0); } }); } }}}); } private void loadDeploy(Object[][] objArr) { new Thread(new Runnable(this, objArr) { // from class: com.XiaoLian.MainActivity.100000008 private final MainActivity this$0; private final Object[][] val$funs; { this.this$0 = r7; this.val$funs = r8; } static MainActivity access$0(AnonymousClass100000008 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { MainActivity.progressBar.setMax(this.val$funs.length); for (int i = 0; i < this.val$funs.length; i++) { HashMap hashMap = new HashMap(); this.this$0.runOnUiThread(new Runnable(this, i, this.val$funs, hashMap) { // from class: com.XiaoLian.MainActivity.100000008.100000006 private final AnonymousClass100000008 this$0; private final int val$finalI; private final Object[][] val$funs; private final HashMap val$map; { this.this$0 = r9; this.val$finalI = r10; this.val$funs = r11; this.val$map = r12; } static AnonymousClass100000008 access$0(AnonymousClass100000006 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { MainActivity.prog_text.setText(String.format("(%d/%d)", new Integer(this.val$finalI + 1), new Integer(this.val$funs.length))); this.val$map.put("msg", this.val$funs[this.val$finalI][0].toString()); this.val$map.put("success", new Boolean(false)); MainActivity.list.add(this.val$map); MainActivity.adapter.notifyDataSetChanged(); } }); ((Runnable) this.val$funs[i][1]).run(); this.this$0.runOnUiThread(new Runnable(this, hashMap, i) { // from class: com.XiaoLian.MainActivity.100000008.100000007 private final AnonymousClass100000008 this$0; private final int val$finalI; private final HashMap val$map; { this.this$0 = r8; this.val$map = r9; this.val$finalI = r10; } static AnonymousClass100000008 access$0(AnonymousClass100000007 r4) { return r4.this$0; } @Override // java.lang.Runnable public void run() { this.val$map.replace("success", new Boolean(true)); MainActivity.adapter.notifyDataSetChanged(); MainActivity.listView.setSelection(MainActivity.listView.getBottom()); MainActivity.progressBar.setProgress(this.val$finalI + 1); } }); } } }).start(); } /* access modifiers changed from: package-private */ /* loaded from: classes.dex */ public class MyAdapter extends BaseAdapter { private List<Map<String, Object>> list; private LayoutInflater mInflater; private final MainActivity this$0; static MainActivity access$0(MyAdapter myAdapter) { return myAdapter.this$0; } public MyAdapter(MainActivity mainActivity, Context context, List<Map<String, Object>> list) { this.this$0 = mainActivity; this.mInflater = LayoutInflater.from(context); this.list = list; } @Override // android.widget.Adapter public int getCount() { return this.list.size(); } @Override // android.widget.Adapter public Object getItem(int i) { return this.list.get(i); } @Override // android.widget.Adapter public long getItemId(int i) { return (long) i; } @Override // android.widget.Adapter public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder viewHolder; View view2 = view; if (view2 == null) { viewHolder = new ViewHolder(this); view2 = this.mInflater.inflate(R.layout.layout_main_item, (ViewGroup) null); viewHolder.msg = (TextView) view2.findViewById(R.id.main_item_msg); viewHolder.success = (ImageView) view2.findViewById(R.id.main_item_success); viewHolder.progressBar = (ProgressBar) view2.findViewById(R.id.progressBar2); view2.setTag(viewHolder); } else { viewHolder = (ViewHolder) view2.getTag(); } viewHolder.msg.setText((String) this.list.get(i).get("msg")); boolean booleanValue = ((Boolean) this.list.get(i).get("success")).booleanValue(); viewHolder.success.setVisibility(booleanValue ? 0 : 8); viewHolder.progressBar.setVisibility(booleanValue ? 8 : 0); return view2; } /* loaded from: classes.dex */ public final class ViewHolder { public TextView msg; public ProgressBar progressBar; public ImageView success; private final MyAdapter this$0; static MyAdapter access$0(ViewHolder viewHolder) { return viewHolder.this$0; } public ViewHolder(MyAdapter myAdapter) { this.this$0 = myAdapter; } } } /* access modifiers changed from: private */ public void ActivityMain() { if (app_Operation_mode_root) { try { RootService.bind(new Intent(this, Class.forName("com.XiaoLian.IPCCond.SuperMain")), new AIDLConnection(false)); if (!Settings.canDrawOverlays(m_activity)) { FloatTool.RunShell(new StringBuffer().append(new StringBuffer().append("appops set --uid ").append(m_activity.getPackageName()).toString()).append(" android:system_alert_window allow").toString(), true); } } catch (ClassNotFoundException e) { throw new NoClassDefFoundError(e.getMessage()); } } else { System.loadLibrary("main"); RequestPermission(); } app_init_mode = true; SPUtils.setParam(getApplicationContext(), "app_init_mode", new Boolean(app_init_mode)); SPUtils.setParam(getApplicationContext(), "app_Operation_mode_root", new Boolean(app_Operation_mode_root)); setContentView(R.layout.main_mocn); f3 = LayoutInflater.from(this).inflate(R.layout.activity_main, (ViewGroup) null); listView = (ListView) f3.findViewById(R.id.list_start_info); progressBar = (ProgressBar) f3.findViewById(R.id.progressBar); prog_text = (TextView) f3.findViewById(R.id.prog_text); f0 = (TextView) f3.findViewById(R.id.go_app); if (!Settings.canDrawOverlays(this)) { startActivityForResult(new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse(new StringBuffer().append("package:").append(getPackageName()).toString())), 4444); } f4 = (EditText) findViewById(R.id.f7); f4.setText(fileUtil.readFile("/storage/emulated/0/Kami")); findViewById(R.id.f8).setOnClickListener(new View.OnClickListener(this) { // from class: com.XiaoLian.MainActivity.100000010 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000010 r4) { return r4.this$0; } @Override // android.view.View.OnClickListener public void onClick(View view) { this.this$0.startActivity(new Intent("android.intent.action.VIEW", Uri.parse("http://llua.cn/?mod=cardcheck&id=74075"))); } }); findViewById(R.id.kaiqi).setOnClickListener(new View.OnClickListener(this) { // from class: com.XiaoLian.MainActivity.100000011 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000011 r4) { return r4.this$0; } @Override // android.view.View.OnClickListener public void onClick(View view) { this.this$0.f5 = MainActivity.f4.getText().toString(); if (this.this$0.f5.length() == 0) { StartGame.showFloatWindow(this.this$0); Toast.makeText(this.this$0, "Holle", 0).show(); } } }); ((Button) findViewById(R.id.reset_im)).setOnClickListener(new View.OnClickListener(this) { // from class: com.XiaoLian.MainActivity.100000012 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000012 r4) { return r4.this$0; } @Override // android.view.View.OnClickListener public void onClick(View view) { SPUtils.setParam(this.this$0.getApplicationContext(), "app_init_mode", new Boolean(false)); System.exit(0); } }); list = new ArrayList(); adapter = new MyAdapter(this, this, list); listView.setAdapter((ListAdapter) adapter); dialog = new AlertDialog.Builder(this).setView(f3).setCancelable(false).create(); if (app_Operation_mode_root) { dialog.show(); initMain(); } } private void SelectModeBox(Activity activity) { app_Operation_mode_root = ((Boolean) SPUtils.getParam(getApplicationContext(), "app_Operation_mode_root", new Boolean(false))).booleanValue(); app_init_mode = ((Boolean) SPUtils.getParam(getApplicationContext(), "app_init_mode", new Boolean(false))).booleanValue(); if (!app_init_mode) { linearLayouts = new LinearLayout(this); linearLayouts.setOrientation(1); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(-1, -1); int dp2px = dp2px(this, (float) 24); linearLayouts.setPadding(dp2px, dp2px, dp2px, dp2px); linearLayouts.setLayoutParams(layoutParams); TextView textView = new TextView(this); textView.setTextColor(-16777216); textView.setLayoutParams(new LinearLayout.LayoutParams(-2, -2)); textView.setText("运行环境"); textView.setTextSize(19.0f); textView.setGravity(17); LinearLayout.LayoutParams layoutParams2 = (LinearLayout.LayoutParams) textView.getLayoutParams(); ((ViewGroup.MarginLayoutParams) layoutParams2).bottomMargin = dp2px(this, (float) 30); textView.setLayoutParams(layoutParams2); Button button = new Button(this); button.setText("ROOT"); button.setTextSize(14.0f); button.setTextColor(-1); button.setBackgroundColor(Color.parseColor("#1E88E5")); button.setLayoutParams(new LinearLayout.LayoutParams(-1, dp2px(this, (float) 45))); ((ViewGroup.MarginLayoutParams) ((LinearLayout.LayoutParams) button.getLayoutParams())).topMargin = dp2px(this, (float) 10); button.setOnClickListener(new View.OnClickListener(this) { // from class: com.XiaoLian.MainActivity.100000013 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000013 r4) { return r4.this$0; } @Override // android.view.View.OnClickListener public void onClick(View view) { this.this$0.dialogsShow.dismiss(); System.out.println("ROOT"); MainActivity.app_Operation_mode_root = true; this.this$0.ActivityMain(); } }); Button button2 = new Button(this); button2.setText("框架"); button2.setTextSize(14.0f); button2.setTextColor(-1); button2.setBackgroundColor(Color.parseColor("#1E88E5")); button2.setLayoutParams(new LinearLayout.LayoutParams(-1, dp2px(this, (float) 45))); ((ViewGroup.MarginLayoutParams) ((LinearLayout.LayoutParams) button2.getLayoutParams())).topMargin = dp2px(this, (float) 15); button2.setOnClickListener(new View.OnClickListener(this) { // from class: com.XiaoLian.MainActivity.100000014 private final MainActivity this$0; { this.this$0 = r6; } static MainActivity access$0(AnonymousClass100000014 r4) { return r4.this$0; } @Override // android.view.View.OnClickListener public void onClick(View view) { this.this$0.dialogsShow.dismiss(); System.out.println("框架"); MainActivity.app_Operation_mode_root = false; this.this$0.ActivityMain(); } }); linearLayouts.addView(textView); linearLayouts.addView(button); linearLayouts.addView(button2); dialogs = new AlertDialog.Builder(this); dialogs.setCancelable(false); dialogs.setView(linearLayouts); this.dialogsShow = dialogs.show(); if (this.dialogsShow.getWindow() != null) { WindowManager.LayoutParams attributes = this.dialogsShow.getWindow().getAttributes(); ((ViewGroup.LayoutParams) attributes).width = dp2px(this, (float) 260); this.dialogsShow.getWindow().setAttributes(attributes); this.dialogsShow.getWindow().setBackgroundDrawableResource(17170443); return; } return; } ActivityMain(); } private int dp2px(Context context2, float f) { return (int) ((f * context2.getResources().getDisplayMetrics().density) + 0.5f); } private void RequestPermission() { if (!Settings.canDrawOverlays(this)) { startActivityForResult(new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse(new StringBuffer().append("package:").append(getPackageName()).toString())), 4444); } } public void requestPermission() { boolean z = true; if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE") != 0) { z = false; } if (checkSelfPermission("android.permission.READ_EXTERNAL_STORAGE") != 0) { z = false; } if (checkSelfPermission("android.permission.RECORD_AUDIO") != 0) { z = false; } if (checkSelfPermission("android.permission.RESTART_PACKAGES") != 0) { z = false; } if (checkSelfPermission("android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND") != 0) { z = false; } if (checkSelfPermission("android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS") != 0) { z = false; } if (checkSelfPermission("android.permission.SYSTEM_ALERT_WINDOW") != 0) { z = false; } if (!z) { requestPermissions(new String[]{"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.RECORD_AUDIO", "android.permission.RESTART_PACKAGES", "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND", "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS", "android.permission.SYSTEM_ALERT_WINDOW", "android.permission.WRITE_EXTERNAL_STORAGE"}, 102); } } if (Build.VERSION.SDK_INT >= 23 && !Settings.canDrawOverlays(this)) { startActivityForResult(new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse(new StringBuffer().append("package:").append(getPackageName()).toString())), 111); } } } 讲解一下这段代码,这个app有什么功能?
10-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值