2011-10-23 5 views
3

기기에 기본으로 정의되지 않은 특정 정의 된 APN을 프로그래밍 방식으로 사용하는 사람이 있는지 알고 있습니까?Android APN 시행

감사합니다.

답변

10

uri content://telephony/carriers/preferapn을 사용하여 프로그래밍 방식으로 기본 APN을 쿼리하고 설정할 수 있습니다. 새로운 기본 APN을 설정하려면 기존 APN 항목의 데이터베이스 ID를 전달해야합니다. (: setPreferredApn(context, "Giffgaff"); 예)

public static final Uri APN_TABLE_URI = Uri.parse("content://telephony/carriers"); 
public static final Uri APN_PREFER_URI = Uri.parse("content://telephony/carriers/preferapn"); 

public static boolean setPreferredApn(Context context, String name) { 
    boolean changed = false; 
    String columns[] = new String[] { Carriers._ID, Carriers.NAME }; 
    String where = "name = ?"; 
    String wargs[] = new String[] {name}; 
    String sortOrder = null; 
    Cursor cur = context.getContentResolver().query(APN_TABLE_URI, columns, where, wargs, sortOrder); 
    if (cur != null) { 
     if (cur.moveToFirst()) { 
      ContentValues values = new ContentValues(1); 
      values.put("apn_id", cur.getLong(0)); 
      if (context.getContentResolver().update(APN_PREFER_URI, values, null, null) == 1) 
       changed = true; 
     } 
     cur.close(); 
    } 
    return changed; 
} 

나는 당신이 WRITE_APN_SETTINGS 권한이 필요하다는 것을 추가하고 android.provider.Telephony와 안드로이드를 가져와야한다 생각 당신이 APN의 표시 이름에 전달하면 다음 함수는이 작업을 수행 할 수 있습니다. provider.Telephony.Carriers이

UPDATE는 4.0

위한이 기능은 안드로이드 4.0 (ICS)의 출시와 함께 사용할되었다. WRITE_APN_SETTINGS 권한을 설정해도 APN을 더 이상 설정할 수는 없습니다. 관련 링크는 this question을 참조하십시오. API page에서이 사용 권한은 외부 사용을위한 것이 아니며 내부적으로 적용됩니다.

+0

해답을 제공해 주셔서 감사합니다. 즉,이 코드를 실행하면 장치의 모든 응용 프로그램이 특정 APN을 사용하게됩니까? – Paz

+0

예. 이렇게하면 장치 선호 APN이 설정됩니다. – patthoyts

+0

감사합니다. 어떤 giffgaff 앱을 만들었습니까? –

-1

나는 방법이 있다고 생각하지 않는다. 아무리해도, 통신사는 소프트웨어 업데이트로 그것을 닦을 수있다. 또한 미국 내 AT & T와 같은 일부 통신사의 경우 특정 APN을 사용하면 해당 사용자의 가입자 번호 (전화 번호가 아니라 고유 한 ID)를 얻는 것과 같은 특정 기능을 제공합니다. 따라서 핸드셋에 설치된 수많은 다른 응용 프로그램에 영향을 미치기 때문에이 변경을 강제하는 것은 좋지 않을 수 있습니다.