2013-03-06 73 views
0

我想做一個android應用程序,必須做一些數據庫活動,如存儲電話號碼和名稱等在SQLite數據庫。這所有數據庫的東西都是作爲服務完成的。一旦通話結束,服務必須立即開始,當通話結束時,存儲的詳細信息必須在通話結束後立即顯示給用戶。爲此,我使用Broad Cast Receiver。我還提供了我在我的應用程序中使用的以下代碼。Android中的服務沒有開始在BroadCast接收器

MyServices.java

public class MyServices extends Service { 
TelephonyManager Tel; 
MyPhoneStateListener MyListener; 
RB_SIGNAL_STRENGTH signalobj = new RB_SIGNAL_STRENGTH(); 
RB_DatabaseHandler db = new RB_DatabaseHandler(getApplicationContext()); 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 


@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    isMyServiceRunning(); 
    MyListener = new MyPhoneStateListener(); 
    Tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
    Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 
    super.onCreate(); 
    Log.i("Serv","Service Started"); 

    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    db.close_DB(); 
    Log.i("Serv","Service Stopped"); 
    super.onDestroy(); 
} 

MyReceiver.java

public class MyPhoneReceiver extends BroadcastReceiver { 
String state=null; 

@Override 
public void onReceive(Context context, Intent intent) { 
    Bundle extras = intent.getExtras(); 

    if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)) 
    { 
     try{ 


     Intent i = new Intent(context,MyServices.class); 

     Log.i("Recv", "In Try"); 
     context.startService(i); 
     } 
     catch(Exception e) 
     { 
      Log.d("Recv", "Service not starting"); 
     } 
    }//End if offhook 
    if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)) 
    { 
     Log.i("Recv","CALL ENDED"); 
     try 
     { 
      Intent i = new Intent(context,EndActivity.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    
      context.startActivity(i); 
     } 
     catch(Exception e){ 
      Log.d("Recv", "Activity not starting"); 
     } 
    } 
    } 

}

的AndroidManifest.xml

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

<uses-sdk android:minSdkVersion="9" /> 

<uses-permission android:name="android.permission.READ_PHONE_STATE" > 
</uses-permission> 
<uses-permission android:name="android.permission.SIGNAL_PERSISTENT_PROCESSES" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 

    <activity android:name="StartActivity" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="EndActivity" > 
    </activity> 
      <receiver android:name=".MyReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" > 
      </action> 
     </intent-filter> 
    </receiver> 
    <service 
     android:name="MyServices" 
     ></service> 
</application> 

回答

1

您的班級名稱爲MyPhoneReceiver,但在您使用MyReceiver的Manifest中,這兩個名稱必須完全匹配。


加成
我只注意到你正在試圖實例數據庫服務有一個有效的上下文之前。這可能會扔在MyServices異常:

RB_DatabaseHandler db = new RB_DatabaseHandler(getApplicationContext()); 

您可以申報db作爲一個字段變量,但離開它空:

RB_DatabaseHandler db; 

而像onStartCommand()的方法裏面初始化:

db = new RB_DatabaseHandler(getApplicationContext()); 

最後,呼叫基本方法如onCreate()或DER通常會產生問題,這是不是在onStartCommand()推薦:

super.onCreate(); 

+0

非常感謝薩姆。請在這方面檢查我的代碼並幫助我。我是這個領域的學習者。請按我的要求。 Dropboxhttps://www.dropbox.com/sh/orvbev0qak1ig4q/_DICsnPlDn – adi 2013-03-07 16:51:31

1

因爲state變量null

public class MyPhoneReceiver extends BroadcastReceiver { 
String state=null; 

@Override 
public void onReceive(Context context, Intent intent) { 
    Bundle extras = intent.getExtras(); 
    state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
    //your code here... 
+0

+1一個很好的觀察以及...嘿,你偷我的答案? Tsk,tsk。 – Sam 2013-03-06 16:26:48

+0

@Sam:實際上我想建議OP也使用全名,包括包名稱來聲明在AndroidManifest中的服務 – 2013-03-06 16:30:02

+0

Hello SamρяσѕρєяK爲你的幫助,我能夠開始服務,但是我無法對其他我應該做的事情。我想與你們分享我的代碼,請在此幫助我。我是Android學習者,請告訴我需要做什麼。我已經提供了一個文本文件供您參考。 DropBox鏈接https://www.dropbox.com/sh/orvbev0qak1ig4q/_DICsnPlDn – adi 2013-03-07 16:49:14