欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android中常用代码

程序员文章站 2022-04-28 11:24:55
...

  • (1) 判断当前进程名是否是指定的名称
public static boolean isNamedProcess(@NonNull Context context, @NonNull String processName) {
        int pid = android.os.Process.myPid();
        ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningAppProcessInfo> processInfoList = manager.getRunningAppProcesses();
        if (processInfoList == null) return false;

        for (RunningAppProcessInfo processInfo : processInfoList) {
            if (processInfo.pid == pid && processName.equals(processInfo.processName)) {
                return true;
            }
        }

        return false;
}
  • (2) 获取当前进程名
@Nullable
    public static String getCurrentProcessName(Context context) {
        if(context == null) return null;

        int pid = android.os.Process.myPid();
        ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningAppProcessInfo> processInfoList = manager.getRunningAppProcesses();
        if (processInfoList == null) return null;

        for (RunningAppProcessInfo processInfo : processInfoList) {
            if (processInfo.pid == pid) {
                return processInfo.processName;
            }
        }

        return null;
}
  • (3) 判断某个时间点是否在某段时间内
public static boolean fallInSection(Date timePoint, Date sectionStart, Date sectionEnd) {
        return timePoint.after(sectionStart) && timePoint.before(sectionEnd);
}

有了上面的方法, 那么判断当前时间是否在某段时间内, 就可以这像下面样写:

public static boolean duringHalloween() {
        Calendar calendar = Calendar.getInstance();
        Date currentTimePoint = calendar.getTime();
        calendar.set(2016, 9, 29, 0, 0, 0);
        Date sectionStart = calendar.getTime();
        calendar.set(2016, 9, 31, 23, 59, 59);
        Date sectionEnd = calendar.getTime();
        return DateUtil.fallInSection(currentTimePoint, sectionStart, sectionEnd);
}
  • (4) 判断Android主进程是否在后台
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;

public class MyApplication extends Application {

    private static MyApplication sInstance;

    public boolean isBackground; //进程是否在后台

    public static MyApplication getInstance() {
        return sInstance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        sInstance = this;

        registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks);
    }

    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);
        if (sInstance == null) return;

        //app切换到后台
        if (level == TRIM_MEMORY_UI_HIDDEN) {
            isBackground = true;

            // TODO: 16/10/8 在此处编写从前台切换到后台的逻辑
        }
    }

    @Override
    public void onTerminate() {
        super.onTerminate();

        unregisterActivityLifecycleCallbacks(mActivityLifecycleCallbacks);
    }

    private ActivityLifecycleCallbacks mActivityLifecycleCallbacks = new ActivityLifecycleCallbacks() {
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}

        @Override
        public void onActivityStarted(Activity activity) {}

        @Override
        public void onActivityResumed(Activity activity) {
            if (isBackground) { //app从后台切换到前台
                isBackground = false;

                // TODO: 16/10/8 在此处编写从后台切换到前台的逻辑
            }
        }

        @Override
        public void onActivityPaused(Activity activity) {}

        @Override
        public void onActivityStopped(Activity activity) {}

        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}

        @Override
        public void onActivityDestroyed(Activity activity) {}
    };
}

像如下方式使用:

public class DownloadService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if(MyApplication.getInstance().isBackground) {
            // TODO: 16/10/8 do something here ......    
        }
        return super.onStartCommand(intent, flags, startId);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
  • (5) 判断视频是否是横屏
  /**
     * 判断视频是否为横屏
     * @param context
     * @param videoUri
     * @return
     */
    public static boolean isHorizontalVideo(Context context, Uri videoUri) {
        MediaMetadataRetriever mmr = new MediaMetadataRetriever();
        try {
            mmr.setDataSource(context, videoUri);

            //MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION, required api17
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                String rotation = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
                int rotationInt = Integer.parseInt(rotation);
                return rotationInt == 0 || rotationInt == 180;
            }

            //less-than api17
            Bitmap bm = mmr.getFrameAtTime();
            return bm != null && bm.getWidth() > bm.getHeight();
        } finally {
            mmr.release();
        }
    }

努力更新中 ......