0

通話中に電話からメッセージを送信したいAndroidアプリを開発しようとしています。

宛先番号は、アプリケーション データベースから取得されます。

その部分までは完了しましたが、アクティビティでブロードキャスト レシーバーにアクセスできません。

public class PARENT_CALLActivity extends Activity 
{
/** Called when the activity is first created. */

String PARENT=null;
EditText edparent;
Button submit;
String parent_number;

public static final String BROADCAST = "sha.pcall.android.action.broadcast";



@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    edparent=(EditText)findViewById(R.id.editText1);
    submit=(Button)findViewById(R.id.btnsubmit);


    submit.setOnClickListener(new OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub


            PARENT=edparent.getText().toString();   

            MyDabasehandler db=new MyDabasehandler(getApplicationContext());

            if(db.getContact().equals(null))
            {
                db.addContact(new Contacts(PARENT));

            }
            else
            {
                db.editContact();
            }

            Intent intent = new Intent(getApplicationContext(),LocationUpdateReceiver.class);
            sendBroadcast(intent);

             finish();
        }

    });       
}

public class LocationUpdateReceiver extends BroadcastReceiver 
{

    @Override
    public void onReceive(Context context, Intent intent)
    {

        String outgoing_number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

        Toast.makeText(context, outgoing_number, Toast.LENGTH_LONG).show();
    }

    }

}
4

1 に答える 1

0

ブロードキャスト レシーバーを拡張して別のクラスを作成する場合は、別のクラス ファイルで作成することをお勧めします。アクティビティが開いている間だけブロードキャストを受信したい場合は、プライベート ブロードキャスト レシーバー変数を作成します。この質問のように:

BroadcastReceiver を登録する場所 (Activity ライフサイクルの楽しみ)

後者の場合、registerreceiver と呼ばれるこのメソッドを使用してブロードキャスト レシーバー変数を登録できます。 ここにリンクがあります

それは実際にはすべて要件に依存します。アプリが閉じられている (またはアクティビティがフォアグラウンドにない) 場合でもブロードキャストを受信したい場合は、ブロードキャスト レシーバーを次のようにマニフェスト ファイルに登録する必要があります。

    <receiver 
        android:name="com.example.myapp.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="com.example.myapp" />
        </intent-filter>
    </receiver>

これは、Google クラウド メッセージ ブロードキャスト レシーバーの例です。また、受信するブロードキャストのタイプを指定するために、インテント フィルターを追加する必要があります。上記の例では、ブロードキャスト レシーバーはアクションを含む 2 つのインテントを受信できます (intent-filter タグを参照)。

"com.google.android.c2dm.intent.RECEIVE" 

"com.google.android.c2dm.intent.REGISTRATION"

これが完了したら、ブロードキャスト レシーバーのオーバーライドされた onReceive() メソッドでタスクを実行できます。

お役に立てれば。

于 2013-02-07T12:34:31.223 に答える