在安卓開發(fā)的過程中鄙皇,通常自定義一些工具類伟恶,或者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
* 通過此類,實現(xiàn)全局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>
至此力图,定義已經(jīng)完成步绸,既可在代碼中進(jìn)行context的調(diào)用。
該方式實現(xiàn)邏輯是通過contentProvider獲取全局context吃媒,達(dá)到不用外部傳入context既可以調(diào)用瓤介。
that's all-------------------------------------------------------------------------------------