Android.Приемник вещания - PullRequest
       38

Android.Приемник вещания

0 голосов
/ 29 августа 2011

У меня возникли проблемы при попытке использовать широковещательный приемник.

Цель: у меня есть три приложения, которые будут работать по следующей схеме 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>

, также я создаю проект приложения (BroadcastSenderExample) в Eclipse, и у него есть файл со следующим отправителем.код

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 Ответ

1 голос
/ 29 августа 2011

Вы смотрели на вывод logcat?Есть очень хороший шанс, что он точно скажет вам, что не так.

Не слишком пристально глядя на ваш код, кажется, что ваш манифест нарушен.В вашем приемнике вы указываете, что android: name это ".receive.SimpleReceiver" ... это значение (при запуске с.) Не просто "часть, которая следует за именем пакета Android) - хотя это работает таким образомбольшую часть времени. В вашем случае ваш пакет Android является «com.test», однако пакет, содержащий ваш приемник, - «com.test.receive.SimpleReceiver», а его пакет Java - «com.test.receive». Попробуйте изменить свойAndroid: имя для "com.test.receive.SimpleReceiver".

...