2011-11-13 22 views
5

我有一個空白的HelloWorld應用程序:啓動/ ScreenOn廣播接收器不工作

package tutorials.TestReceivers; 

import android.app.Activity; 
import android.os.Bundle; 

public class TestReceiversActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

有了這個BootReceiver.Java:

package tutorials.TestReceivers; 

import android.content.BroadcastReceiver; 

public class BootReceiver extends BroadcastReceiver { 
public void onReceive(Context context, Intent arg1) { 
    Intent intent = new Intent(context, TestReceiversActivity.class); 
     context.startActivity(intent);  
    } 
} 

這個清單:

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".TestReceiversActivity" 
        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-permission="android.permission.RECEIVE_BOOT_COMPLETED" 
      android:name="development.TestReceiversActivity.BootReceiver" > 
      <intent-filter > 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
       <action android:name="android.intent.action.SCREEN_ON" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

運行應用程序並關閉後克它。

當我解鎖屏幕(SCREEN_ON)沒有任何事情發生。

當我啓動我得到下一味精像decive: 「該應用程序TestReceiversActivity(tutorials.TestReceivers進程)意外停止重試」

+1

SCREEN_ON不從清單工作 – Selvin

回答

7

經過長時間的挫折,我解決了上述問題。

註冊引導廣播接收器(和根據它開放活性)正確的方法,是:

空白HelloWorld應用程序(TestReceiversActivity.java):

package tutorials.TestReceivers; 

import android.app.Activity; 
public class TestReceiversActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

另一個引導接收機類(BootReceiver。 java)

package tutorials.TestReceivers; 

import android.content.BroadcastReceiver; 
public class BootReceiver extends BroadcastReceiver{ 
@Override 
public void onReceive(Context context, Intent intent) { 
     Log.d("DAVID", "Hi, Boot reciver was catch!"); 
     Intent i = new Intent(context, TestReceiversActivity.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
     } 
} 

注意:您必須設置標誌使其工作!

設置艙單:

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

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
      <receiver android:name=".BootReceiver" > 
      <intent-filter > 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 
     <activity android:name=".TestReceiversActivity" 
        android:label="@string/app_name"> 
       <intent-filter > 
        <action android:name="android.intent.action.MAIN" /> 
        <category android:name="android.intent.category.LAUNCHER" /> 
       </intent-filter> 
     </activity> 
    </application> 
</manifest> 

享受!

+0

有用的,謝謝 – vondip

+0

爲了您的安全,使用PendingIntent啓動Acitivity .. – cmcromance

4

刪除android-permission="android.permission.RECEIVE_BOOT_COMPLETED"。爲此權限添加一個<uses-permission>元素作爲<manifest>元素的子元素。

如果問題仍然存在,請在Eclipse中使用adb logcat,DDMS或DDMS透視圖來查看LogCat並檢查與崩潰相關的堆棧跟蹤。

Here is a sample project顯示如何在啓動時獲得控制權。

SCREEN_ON將不會從清單工作。

+0

仍然無法正常工作。我會嘗試檢查堆棧跟蹤 – David