2011-11-13 54 views
5

Tôi có một ứng dụng trống HelloWorld:Boot/ScreenOn Broadcast Receiver không làm việc

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); 
    } 
} 

Với BootReceiver.Java này:

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);  
    } 
} 

và manifest này:

<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> 

Sau khi chạy ứng dụng và đóng g nó.

Khi tôi mở khóa màn hình (SCREEN_ON) không có gì xảy ra.

Và khi tôi khởi động decive Tôi nhận được msg tiếp theo như: "Việc áp dụng TestReceiversActivity (tutorials.TestReceivers quá trình) dừng lại bất ngờ Thử lại"

+1

SCREEN_ON không hoạt động từ tệp kê khai – Selvin

Trả lời

7

Sau một thời gian dài thất vọng, tôi đã giải quyết được vấn đề ở trên.

Cách quyền đăng ký Boot Broadcast Receiver (và hoạt động mở theo nó), là:

Trống HelloWorld Application (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); 
    } 
} 

Một Boot Receiver Class (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); 
     } 
} 

Lưu ý: Bạn phải đặt cờ để làm cho nó hoạt động!

Đặt manifest để:

<?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> 

Thưởng thức!

+0

Hữu ích, cảm ơn bạn – vondip

+0

Vì sự an toàn của bạn, hãy sử dụng PendingIntent để bắt đầu Độ nhạy .. – cmcromance

4

Xóa android-permission="android.permission.RECEIVE_BOOT_COMPLETED". Thêm phần tử <uses-permission> cho quyền này làm phần tử con của phần tử <manifest>.

Nếu sự cố vẫn tiếp diễn, hãy sử dụng góc nhìn adb logcat, DDMS hoặc DDMS trong Eclipse để xem LogCat và kiểm tra dấu vết ngăn xếp liên quan đến sự cố của bạn.

Here is a sample project cho biết cách kiểm soát thời gian khởi động.

SCREEN_ON sẽ không hoạt động từ tệp kê khai.

+0

Vẫn không hoạt động. Tôi sẽ thử kiểm tra dấu vết ngăn xếp – David

Các vấn đề liên quan