2016-10-19 12 views
1

C/C++ (ndk 사용)에서 장치의 imei을 얻고 JNI로 결과를 검색하려고합니다.안드로이드가 cc/C++에서 ndk/JNI를 얻으려고

const char *res = exec_get_out("service call iphonesubinfo 3"); 

쉘에서 작동하지만 내 응용 프로그램

에 나는 매니페스트에 설정된 READ_PHONE_STATE 권한이 없습니다. 이것은 Marshmallow Android를 대상으로합니다 (설정에서 허가를 받았습니다).

JNI 환경이 없으면 작동하지 않거나 불가능할 다른 솔루션이 있습니까?

답변

0

체크 thisthis

#include <sys/system_properties.h> 

    //returns the string length of the value. 
    int ir = __system_property_get("ro.gsm.imei", imei_start);   

     if(ir > 0) 
    { 
     imei_start[15]=0;//strz end  
     printf("method1 got imei %s len %d\r\n",imei_start,strlen(imei_start)); 
     strcpy(g_imei,imei_start); 
    } 
     else 
    { 
     printf("method1 imei failed - trying method2\r\n"); 
     //old dumpsys imei getter 
     char* res = exec_get_out("dumpsys iphonesubinfo"); 
     const char* imei_start_match = "ID = "; 
     int imei_start_match_len = strlen(imei_start_match); 
     char* imei_start = strstr(res,imei_start_match); 
     if(imei_start && strlen(imei_start)>=15+imei_start_match_len) 
     { 
      imei_start += imei_start_match_len; 
      imei_start[15] = 0; 
      printf("method2 IMEI [%s] len %d\r\n",imei_start,strlen(imei_start)); 
      strcpy(g_imei,imei_start); 
     } 
    }