2012-06-24 2 views
2

네트워크 데이터 패킷 연결을 활성화 및 비활성화 할 수있는 Android 애플리케이션을 작성 중입니다. 또한 하나의 브로드 캐스트 수신기를 사용하여 네트워크 데이터 패킷 연결을 확인하고 있습니다. 브로드 캐스트 리시버를 등록하고 Manifest 파일에 필요한 권한을 제공했습니다. 하지만이 응용 프로그램을 실행하면 연결 상태가 변경되고 충돌이 발생합니다. 그러나이 브로드 캐스트 리시버를 포함하지 않으면 잘 동작합니다. 나는 어떤 단서를 제공 할 수있는 어떤 종류의 로그도 볼 수 없다.네트워크 데이터 패킷 연결 의도

다음은 방송 수신기 용 코드입니다.

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.rakesh.simplewidget" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="10" /> 
    <!-- Permissions --> 
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".SimpleWidgetExampleActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <!-- 
     <receiver 
      android:name=".ExampleAppWidgetProvider" 
      android:label="Widget ErrorBuster" > 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      </intent-filter> 

      <meta-data 
       android:name="android.appwidget.provider" 
       android:resource="@xml/widget1_info" /> 
     </receiver> 
     --> 
     <receiver android:name=".ConnectivityReceiver" > 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

내 브로드 캐스트 수신기 클래스는 다음과 같습니다.

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.util.Log; 


public class ConnectivityReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     NetworkInfo info = (NetworkInfo)intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
     if(info.getType() == ConnectivityManager.TYPE_MOBILE){ 
      if(info.isConnectedOrConnecting()){ 
       Log.e("RK","Mobile data is connected"); 
      }else{ 
       Log.e("RK","Mobile data is disconnected"); 
      } 
     } 
    } 

} 

내 주요 활동 파일.

package com.rakesh.simplewidget; 

import java.lang.reflect.Field; 
import java.lang.reflect.Method; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Color; 
import android.net.ConnectivityManager; 
import android.os.Bundle; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class SimpleWidgetExampleActivity extends Activity { 
    private Button btNetworkSetting; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     btNetworkSetting = (Button)findViewById(R.id.btNetworkSetting); 
     if(checkConnectivityState(getApplicationContext())){ 
      btNetworkSetting.setBackgroundColor(Color.GREEN); 
     }else{ 
      btNetworkSetting.setBackgroundColor(Color.GRAY); 
     } 
    } 

    public void openNetworkSetting(View view){ 

     Method dataConnSwitchmethod; 
     Class telephonyManagerClass; 
     Object ITelephonyStub; 
     Class ITelephonyClass; 
     Context context = view.getContext(); 
     boolean enabled = !checkConnectivityState(context); 
     final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 


     try{ 
      final Class conmanClass = Class.forName(conman.getClass().getName()); 
      final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); 
      iConnectivityManagerField.setAccessible(true); 
      final Object iConnectivityManager = iConnectivityManagerField.get(conman); 
      final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName()); 
      final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); 
      setMobileDataEnabledMethod.setAccessible(true); 

      setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled); 

      if(enabled){ 
       Toast.makeText(view.getContext(), "Enabled Network Data", Toast.LENGTH_LONG).show(); 
       view.setBackgroundColor(Color.GREEN); 
      } 
      else{ 
       Toast.makeText(view.getContext(), "Disabled Network Data", Toast.LENGTH_LONG).show(); 
       view.setBackgroundColor(Color.LTGRAY); 
      } 
     }catch(Exception e){ 
      Log.e("Error", "some error"); 
      Toast.makeText(view.getContext(), "It didn't work", Toast.LENGTH_LONG).show(); 
     } 
    } 

    private boolean checkConnectivityState(Context context){ 
     final TelephonyManager telephonyManager = (TelephonyManager) context 
       .getSystemService(Context.TELEPHONY_SERVICE); 
     ConnectivityManager af ; 
     return telephonyManager.getDataState() == TelephonyManager.DATA_CONNECTED; 

    } 
} 

로그 파일 : 그것은 안드로이드를 보인다

java.lang.RuntimeException: Unable to instantiate receiver com.rakesh.simplewidget.ConnectivityReceiver: java.lang.ClassNotFoundException: com.rakesh.simplewidget.ConnectivityReceiver in loader dalvik.system.PathClassLoader[/data/app/com.rakesh.simplewidget-2.apk] 
E/AndroidRuntime(26094): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1777) 
E/AndroidRuntime(26094): at android.app.ActivityThread.access$2400(ActivityThread.java:117) 
E/AndroidRuntime(26094): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:985) 
E/AndroidRuntime(26094): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(26094): at android.os.Looper.loop(Looper.java:130) 
E/AndroidRuntime(26094): at android.app.ActivityThread.main(ActivityThread.java:3691) 
E/AndroidRuntime(26094): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(26094): at java.lang.reflect.Method.invoke(Method.java:507) 
E/AndroidRuntime(26094): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
E/AndroidRuntime(26094): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
E/AndroidRuntime(26094): at dalvik.system.NativeStart.main(Native Method) 

파일 방송 수신기 클래스를 인식 할 수 없습니다. 왜이 오류가 발생하는지 알기 원하십니까?

PS : 안드로이드 환경 및 플랫폼에 대한 몇 가지 정보를 제공합니다. - 안드로이드 API (10) - 삼성 갤럭시 II에서 실행 안드로이드 2.3.6

편집이 있습니다

내 방송 수신기 파일 ConnectivityReceiver.java는 기본 패키지에 있었고 그것이 안드로이드를 인식하지 못한했습니다. 안드로이드는 현재 패키지에서이 파일을 찾고있었습니다. 즉 com.rakesh.simplewidget; 나는 connectivityReciever.java 파일을 com.rakesh.simplewidget 패키지로 옮겼고 문제가 해결되었습니다.

+0

로그를 여기에 표시하십시오. –

+0

내 마지막 실행 중입니다. 완전한 manifest.xml을 보냅니다. –

+0

@VipulShah 적절한 로그를 볼 수 없습니다. 내 이클립스에 뭔가 문제가있다. – Rakesh

답변

1

내 방송 수신기 파일 ConnectivityReceiver.java 실수로 기본 패키지에 존재했다. Android가 현재 패키지에서 ConnectivityReceiver을 검색했기 때문에 Android가이 파일을 인식하지 못했습니다. 그것은이를 디버깅하는 나에게 반 시간을 발생 간단한 눈에 띄지 실수 com.rakesh.simplewidget;

즉.

내 질문을 읽는 시간을내어 여러분의 의견을 제공하는 너희들을 감사드립니다.

메인 게시물을 업데이트했습니다.