Androidでcmwap/cmnetネットワーク切り替え疑惑?
15285 ワード
一、ネット上で1段のコードを見て、現在の携帯電話のネットワークを検出して、そして自動的にCmwapネットワークのdemoに切り替えて、理論的には実行可能で、cmwapに修正することができますが、実際の運行の中でこのような間違いを報告します:
二、エラーは以下の通りです.
Caused by: java.lang.SecurityException: No permission to write APN settings: Neither user 10069 nor current process has android.permission.WRITE_APN_SETTINGS.
でもWRITEに参加しましたAPN_SETTINGSという権限は、ネットで検索してみると、4.0以上のバージョンでgoogleはandroidを禁止したという人がいます.permission.WRITE_APN_SETTINGS,
同じ問題の解決策を示しました
一つはアプリケーションにROOT権限があり、もう一つはAPKのUIDをシステムと同じように設定することです.肝心なのは私の携帯電話がrootを過ぎたので、次の問題が残っています.今はまだ解決方法が見つかりません.もし友达が良い解決方法があれば、返事してください.ありがとうございます.コードは次のとおりです.
ネットユーザーの質問:
ネットで検索したらAndroid 2.3以降は使用不可
http://stackoverflow.com/questions/4715250/how-to-grant-modify-phone-state-permission-for-apps-ran-on-gingerbread
この問題を解決した人はいますか.
インターネット検索には、ROOT権限を適用する方法と、APKのUIDをシステムと同じように設定する方法の2つがありますが、具体的な実現方法はなく、共通の方法ではありません.
誰かこの機能を実現したことがありますか?
二、エラーは以下の通りです.
Caused by: java.lang.SecurityException: No permission to write APN settings: Neither user 10069 nor current process has android.permission.WRITE_APN_SETTINGS.
でもWRITEに参加しましたAPN_SETTINGSという権限は、ネットで検索してみると、4.0以上のバージョンでgoogleはandroidを禁止したという人がいます.permission.WRITE_APN_SETTINGS,
同じ問題の解決策を示しました
一つはアプリケーションにROOT権限があり、もう一つはAPKのUIDをシステムと同じように設定することです.肝心なのは私の携帯電話がrootを過ぎたので、次の問題が残っています.今はまだ解決方法が見つかりません.もし友达が良い解決方法があれば、返事してください.ありがとうございます.コードは次のとおりです.
ネットユーザーの質問:
ネットで検索したらAndroid 2.3以降は使用不可
MODIFY_PHONE_STATE
詳細は、http://code.google.com/p/android/issues/detail?id=15031を参照してください.http://stackoverflow.com/questions/4715250/how-to-grant-modify-phone-state-permission-for-apps-ran-on-gingerbread
この問題を解決した人はいますか.
インターネット検索には、ROOT権限を適用する方法と、APKのUIDをシステムと同じように設定する方法の2つがありますが、具体的な実現方法はなく、共通の方法ではありません.
誰かこの機能を実現したことがありますか?
// APN
private boolean getCurrentAPN(){
PREFERRED_APN_URI = Uri.parse("content://telephony/carriers/preferapn");
cursor_current = this.getContentResolver().query(PREFERRED_APN_URI, null, null, null, null);
if(cursor_current != null && cursor_current.moveToFirst()){
String proxy = cursor_current.getString(cursor_current.getColumnIndex("proxy"));
String apn = cursor_current.getString(cursor_current.getColumnIndex("apn"));
String port = cursor_current.getString(cursor_current.getColumnIndex("port"));
String current = cursor_current.getString(cursor_current.getColumnIndex("current"));
if(proxy == null || apn == null || port == null || current == null
|| proxy.equals("") || port.equals("")){
return false;
}
if((proxy.equals("10.0.0.172") || proxy.equals("010.000.000.172")) && port.equals("80") &&
apn.equals("cmwap") && current.equals("1")){
return true;
}
}
return false;
}
// cmwap
private boolean checkHasWapAPN(){
APN_TABLE_URI = Uri.parse("content://telephony/carriers");
cursor_need = this.getContentResolver().query(APN_TABLE_URI, null, null, null, null);
while(cursor_need != null && cursor_need.moveToNext()){
String id = cursor_need.getString(cursor_need.getColumnIndex("_id"));
String port = cursor_need.getString(cursor_need.getColumnIndex("port"));
String proxy = cursor_need.getString(cursor_need.getColumnIndex("proxy"));
String current = cursor_need.getString(cursor_need.getColumnIndex("current"));
String mmsc = cursor_need.getString(cursor_need.getColumnIndex("mmsc"));
if(proxy == null || port == null || current == null){
continue;
}
if((proxy.equals("10.0.0.172") || proxy.equals("010.000.000.172"))
&& port.equals("80") && current.equals("1")
&& mmsc == null){
APN_Id = id;
return true;
}
}
return false;
}
// cmwap
public boolean setAPN(int id){
// wifi ,
wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
if(wifi.isWifiEnabled()){
wifi.setWifiEnabled(false);
}
boolean res = false;
ContentResolver resolver = this.getContentResolver();
ContentValues values = new ContentValues();
values.put("apn_id", id);
try{
resolver.update(PREFERRED_APN_URI, values, null, null);
Cursor c = resolver.query(PREFERRED_APN_URI, new String[]{"name", "apn"}, "_id=" + id, null, null);
if(c != null){
res = true;
c.close();
}
}catch(SQLException e){
Log.e("lhl", e.getMessage());
}
return res;
}
// cmwap
private int addCmwapAPN(){
ContentResolver cr = this.getContentResolver();
ContentValues cv = new ContentValues();
cv.put("name", "cmwap");
cv.put("apn", "cmwap");
cv.put("proxy", "010.000.000.172");
cv.put("port", "80");
cv.put("current", 1);
tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String imsi =tm.getSubscriberId();
if(imsi != null){
if(imsi.startsWith("46000")){
cv.put("numeric", "46000");
cv.put("mcc", "460");
cv.put("mnc", "00");
}
else if(imsi.startsWith("46002")){
cv.put("numeric", "46002");
cv.put("mcc", "460");
cv.put("mnc", "02");
}
}
Cursor c = null;
try{
Uri newRow = cr.insert(APN_TABLE_URI, cv);
if(newRow != null){
c = cr.query(newRow, null, null, null, null);
c.moveToFirst();
String id = c.getString(c.getColumnIndex("_id"));
setAPN(Integer.parseInt(id));
return Integer.parseInt(id);
}
}catch(SQLException e){
Log.e("lhl", e.getMessage());
}
finally{
if(c != null){
c.close();
}
}
return 0;
}
// :
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>