2011-08-29 281 views
0

嘗試使用廣播接收器時遇到一些問題。Android。廣播接收器

目標: 我有三個應用程序,它將工作下一個架構 1.首先 - 廣播接收器應用程序,它會寫一些數據時,它會收到一條消息數據庫。 2.第二 - 是應用程序的Android的將發送一些意圖必須保存在數據庫中的數據。 3.第三 - 在主屏幕上的小部件,它也會發送一些意圖,必須保存在數據庫中的數據。

因此,我在日食上製作了三個應用程序。 1. BroadcastReceiverExample - 廣播接收機,它有下一個文件

package com.test.receive; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.widget.Toast; 

public class SimpleReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "service get started action", Toast.LENGTH_LONG).show(); 
     Log.e("START","START"); 

    } 

} 

和清單文件源

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

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <receiver android:enabled="true" android:name=".receive.SimpleReceiver" android:exported="false"> 
      <intent-filter android:priority="999"> 
       <action android:name="com.test.SIMPLE_TEST_SERVICE"></action> 
      </intent-filter> 
     </receiver> 

    </application> 
</manifest> 

也是我在Eclipse 創建應用項目(BroadcastSenderExample),並將其與下一發送代碼

文件
package com.test.sender; 

import com.test.R; 

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class BroadcastSenderExample extends Activity { 

    public final static String ACTION="com.test.SIMPLE_TEST_SERVICE"; 
    public final static String TYPE="type"; 
    public final static int START=1; 
    public final static int STOP=0; 

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

     btnStart=(Button)findViewById(R.id.btnStart); 
     btnStart.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       Intent bcIntent=new Intent(ACTION); 
       sendBroadcast(bcIntent); 
      } 
     }); 
     btnEnd=(Button)findViewById(R.id.btnEnd); 
     btnEnd.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       Intent bcIntent=new Intent(ACTION); 
       sendBroadcast(bcIntent); 
      } 
     }); 
    } 

    private Button btnStart=null; 
    private Button btnEnd=null; 

} 

然後我在設備上安裝第一個應用程序(並且模擬器也嘗試),然後安裝第二個應用程序。 然後第二個應用程序運行意圖調用什麼都沒有發生。

我在做什麼錯?

我就與下一個代碼

項目一個wBRReceiver

文件WBRReceiver.java

包com.x.brreceiver兩個項目;

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.widget.Toast; 

public class WBRReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     Log.i("THIS IS A TEST RECEIVER","THIS IS A TEST RECEIVER"); 
     Toast.makeText(arg0, "this is a test receiver", Toast.LENGTH_LONG).show(); 
    } 

} 

AndroidManifest.xml中

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

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <receiver android:name="WBRReceiver"> 
      <intent-filter> 
       <action android:name="com.x.START"></action> 
      </intent-filter> 
     </receiver> 

    </application> 
</manifest> 

而且項目中的兩個wBRSender

文件WBRSenderActivity.java

package com.x.brsender; 

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

public class WBRSenderActivity extends Activity { 

    private String ACTION_NAME="com.x.START"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Intent brr=new Intent(ACTION_NAME); 
     //I can't use this 
     //brr.setClass(this, WBRReceiver.class); 
     //Because i just don't have this class in this case 
     sendBroadcast(brr); 
    } 
} 

和明顯

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

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".WBRSenderActivity" 
        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> 

然後我安裝的第一個應用到模擬器,然後運行第二個應用程序。它的工作原理。

回答

1

你看看logcat輸出嗎?它很有可能告訴你到底發生了什麼問題。

沒有太多地盯着你的代碼,看起來你的清單已經壞了。在你的接收器中,你聲明瞭android:name是「.receive.SimpleReceiver」...這個值(當以。開頭時)不是簡單的「跟隨Android包名稱的部分」) - 雖然它以這種方式工作在你的情況下,你的Android包是「com.test」,但是包含你的接收者的包是「com.test.receive」。SimpleReceiver「和它的Java包是」com.test.receive「。試着將你的android:name改爲」com.test.receive.SimpleReceiver「。