2012-09-07 34 views
2

Android应用程序只能播放接收器和服务而没有活动吗? 如果这是可能的我怎么能调用广播接收器? Android系统会自动调用broadcsat接收器?广播接收器Android应用程序只能播放接收器和服务而没有活动

public class CheckReceiver extends BroadcastReceiver { 

     public Context con; 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      // TODO Auto-generated method stub 

      Toast.makeText(context, "Received", Toast.LENGTH_LONG).show(); 
      // add PhoneStateListener 
      PhoneCallListener phoneListener = new PhoneCallListener(); 
      TelephonyManager telephonyManager = (TelephonyManager) context 
        .getSystemService(Context.TELEPHONY_SERVICE); 
      telephonyManager.listen(phoneListener, 
        PhoneStateListener.LISTEN_CALL_STATE); 

      con = context; 
           } 

     class PhoneCallListener extends PhoneStateListener { 

      private boolean isPhoneCalling = false; 

      String LOG_TAG = "LOGGING 123"; 

      @Override 
      public void onCallStateChanged(int state, String incomingNumber) { 

       if (TelephonyManager.CALL_STATE_RINGING == state) { 
        // phone ringing 
        Log.i(LOG_TAG, "RINGING, number: " + incomingNumber); 
       } 

       if (TelephonyManager.CALL_STATE_OFFHOOK == state) { 
        // active 
        Log.i(LOG_TAG, "OFFHOOK"); 

        isPhoneCalling = true; 
       } 

       if (TelephonyManager.CALL_STATE_IDLE == state) { 
        // run when class initial and phone call ended, need detect flag 
        // from CALL_STATE_OFFHOOK 
        Log.i(LOG_TAG, "IDLE"); 
        if (isPhoneCalling) { 
         Log.i(LOG_TAG, "restart app"); 
         Intent start = new Intent(con, CheckService.class); 
         con.startService(start); 
         isPhoneCalling = false; 
        } 

       } 
      } 
     } 
    } 

服务守则

代码是

public class CheckService extends Service{ 

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

    @Override 
    public void onStart(Intent intent, int startId) { 
     // TODO Auto-generated method stub 
     super.onStart(intent, startId); 
     Intent dialogIntent = new Intent(CheckService.this,SmartDialog.class); 
     dialogIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(dialogIntent); 


     //Toast.makeText(CheckService.this, "Serive", Toast.LENGTH_LONG).show(); 
    } 

} 

Android清单文件是

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

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

    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 

     <receiver android:name="CheckReceiver"></receiver> 
     <service android:name="CheckService"></service> 
     <activity android:name="SmartDialog" android:theme="@android:style/Theme.Dialog"></activity> 
    </application> 

当我尝试运行这段代码接收器,无法启动。任何帮助都将非常有帮助

+0

,如果你不想在你的应用程序的任何活动,你只能有接收器和服务! –

+0

我在上面的代码中只有接收器和服务本身,谁会调用接收器是问题,android会自动执行它吗? – Badrinath

+0

你的清单需要被告知何时调用接收器...即INTENT必须被定义! 试试这个:http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html –

回答

8

从Honeycomb开始,BroadcastReceivers将以停止状态安装,并且在应用程序实际运行之前不会触发,即您将需要一个至少运行一次的活动。这是深入解释这个Commonsware博客文章:

Broadcast Regression Confirmed

Android 3.1

0
public class FlashApkclass extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 

    } 
} 

在你manifest.xml文件设置你的Android:名字像

<receiver android:name="com.example.ambrecentral.server.FlashApkclass" 
       android:exported="false"> 
     <intent-filter> 
     // register you broadcast receiver to list broadcast 
      <action android:name="com.example.android.APP_CLOUD_DELETE_APK"/> 
     </intent-filter> 

</receiver> 

,如果你想播出

broadcast.setAction(BROADCAST_ACTION); 
sendBroadcast(broadcast); 

其中BROADCAST_ACTION是

public static String BROADCAST_ACTION = "com.example.android.APP_CLOUD_DELETE_APK";  
+0

我应该在哪写这部分代码? broadcast.setAction(BROADCAST_ACTION); sendBroadcast(广播); – Badrinath

相关问题