androidAndroid开发安卓

关于安卓获取全局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-------------------------------------------------------------------------------------

上一篇下一篇

猜你喜欢

热点阅读