service调用bugreport

来源:互联网 发布:kali linux arp 编辑:程序博客网 时间:2024/06/11 16:16
/*****************************************************************************************************/
/*****************************************************************************************************/
service的类型并非只有 service list列出的那些,还有如下的类型?


packages/apps/yyyy/app/klorobot/src/com/xxxx/klo/bugreport/service/FeedbackBackgroundService.java


public class FeedbackBackgroundService extends Service {
public void handleMessage(Message msg) {
    Utils.logD(TAG, "handleMessage");
    switch (msg.what) {
        case MSG_COLLECTING_LOG:
            collectLogs();
            sendAnalytics();
            break;
        case MSG_PACKING:
            preparingSubmit();
            break;
        case MSG_SUBMIT_FEEDBACK:
            submit();
            break;
        case MSG_STOP_SELF:
            Utils.logD(TAG, "handleMessage stopSelf");
            stopSelf();
            break;
        case MSG_RECORD_KLO_ANALYTICS:
            sendAnalytics();
            sendMsgToTarget(MSG_STOP_SELF);
            break;
        case MSG_ACTIVE_UPLOAD_KLO_BUGREPORT:
            activeUploadKLOBugreport();
            break;
        default :
    }
}


private void activeUploadKLOBugreport() {
/**
* 1. Generate klobugreport
* */
dumpLogs();
if (mServiceStatus == Globals.FEEDBACK_SERVICE_STOP_SELF) {
   sendMsgToTarget(MSG_STOP_SELF);
} else {
   packFeedback();
}


if (!Utils.isWifiConnected(getApplicationContext())) {
   Utils.logI(TAG, "activeUploadKLOBugreport not wifi return");
   sendMsgToTarget(MSG_STOP_SELF);
   return;
}
}


private void dumpLogs() {
        Utils.logD(TAG, "dumpLogs");
        String logFileName = "bugreport_" + System.currentTimeMillis() + ".log";
        int androidVersion = 0;
        try {
            androidVersion = android.os.Build.VERSION.SDK_INT;
        } catch (NumberFormatException e) {
        }
        if (androidVersion >= 21) {
            Utils.logD(TAG, "dumpLogs androidVersion >= 21");
            dumpLogsHighVersion(logFileName);
        } else {
            Utils.logD(TAG, "dumpLogs androidVersion < 21");
            dumpLogsLowVersionNoVibrate(logFileName);
        }
}


/*****************************************************************************************************/
java层怎样获得wak lock?
        //get wake lock
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "klorobot");
        // Most hold the wakelock in 5 mins.
        wakeLock.acquire(5 * DateUtils.MINUTE_IN_MILLIS);


        //release wake lock
        if (wakeLock.isHeld()) {
            wakeLock.release();
        }


/*****************************************************************************************************/
packages/apps/yyyy/app/klorobot/jni/com_xxxx_klorobot_FeedbackBackgroundService.cpp
static const JNINativeMethod methods[] = {
    {"nativeKLOFeatureEnable",    "(I)I",
        (void*)com_xxxx_klo_bugreport_EnableKLO },
    {"nativeDumpBugreport",    "(Ljava/lang/String;I)I",
        (void*)com_xxxx_klo_bugreport_dump_bugreport}
};


static jint com_xxxx_klo_bugreport_dump_bugreport(JNIEnv *env, jobject clazz,
        jstring name, jint level) {
    int32_t ret = 0;
    ALOGD("klobugreport com_xxxx_klorobotrelease_dump_bugreport");
    const char* name_info = NULL;
    if (name != NULL) {
        name_info = env->GetStringUTFChars(name, 0);
        ret = klo_dump_bugreport(name_info, level);
        if (name_info != NULL) {
            env->ReleaseStringUTFChars(name, name_info);
            env->DeleteLocalRef(name);
        }
    } else {
        ALOGE("klobugreport name == null");
        ret = -1;
    }
    return (jint) ret;
}


int32_t klo_dump_bugreport(const char *file_path, int32_t level) {
    FILE* dest_fp = fopen(file_path, "w");
    fflush(stdout);
    dup2(fileno(dest_fp), fileno(stdout));
    ret = dump_customized_bugreport(level);
    fclose(dest_fp);
    return ret;
}


int32_t dump_customized_bugreport(int32_t level) {
    ALOGD("klobugreport dump_customized_bugreport level:%d\n", level);
    int32_t ret = -1;
    if (2 == level) {
        dump_customized_bugreport_simplified();
        ret = 2;
    } else if (3 == level) {
        dump_customized_bugreport_simplified_2();
        ret = 3;
    } else if (4 == level) {
        dump_customized_bugreport_simplified_3();
        ret = 4;
    }
    fflush(stdout);
    return ret;
}


/************************************************************************************************/
AndroidManifest.xml
        <service
            android:name=".service.FeedbackBackgroundService"
            android:exported="true"
            android:permission="com.xxxx.klo.bugreport.permission.FEEDBACK_SERVICE"
            >
        </service>


        <service
            android:name=".service.MemoryCollectionService"
            android:exported="false" />
0 0
原创粉丝点击