关于安卓获取全局context的无感获取
2021-08-09 本文已影响0人
motosheep
在安卓开发的过程中,通常自定义一些工具类,或者module甚至是一些sdk的时候,都会用到一个context。这些context对象,一般也是全局context。本文介绍的是如何在代码中,无感地获取全局context。
首先,新键一个类,继承一个ContentProvider。
实例代码如下:
package com.north.light.libshare.contentprovider;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
/**
* @Author: lzt
* @CreateDate: 2021/7/30 16:42
* @Version: 1.0
* @Description:share lib content provider
* 通过此类,实现全局content获取
*/
public class ShareContentProvider extends ContentProvider {
/**
* 全局content
*/
private static volatile Context mAppContent;
public static Context getAppContent() {
return mAppContent;
}
@Override
public boolean onCreate() {
mAppContent = getContext().getApplicationContext();
return false;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) {
return null;
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {
return null;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) {
return 0;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) {
return 0;
}
}
可以看出,上述的代码,在onCreate方法中,初始化了context。接下来,需要在manifest文件中定义好这个ContentProvider,实例代码如下:
<application>
...
<!--无感context-->
<provider
android:name=".contentprovider.ShareContentProvider"
android:authorities="${applicationId}.contextprovider"
android:exported="false" />
...
</application>
至此,定义已经完成,既可在代码中进行context的调用。
该方式实现逻辑是通过contentProvider获取全局context,达到不用外部传入context既可以调用。
that's all-------------------------------------------------------------------------------------