2

私はこのトピックに関する他の質問を調べてここ数時間過ごしましたが、私が見つけたものはどれも私に答えを与えることができませんでした。

アクティビティからバックグラウンドでブロードキャストレシーバーに文字列を渡すための最良の方法は何ですか?

これが私の主な活動です

public class AppActivity extends DroidGap {
 SmsReceiver mSmsReceiver = new SmsReceiver();

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     

    ScrollView scroll;
    scroll = new ScrollView(this);

    Bundle bundle = getIntent().getExtras();
    final String ownAddress  = bundle.getString("variable");

    registerReceiver(mSmsReceiver, new IntentFilter("MyReceiver"));
             Intent intent = new Intent("MyReceiver");
              intent.putExtra("passAddress", ownAddress);
             sendBroadcast(intent);

            Log.v("Example", "ownAddress: " + ownAddress);
 }
}


これが私の放送受信機です

public class AppReceiver extends BroadcastReceiver {
 public void onReceive(Context context, Intent intent) {

    final String ownAddress  = intent.getStringExtra("passAddress");
    Toast test = Toast.makeText(context,""+ownAddress,Toast.LENGTH_LONG);
    test.show();

    Log.v("Example", "ownAddress: " + ownAddress);

 }
}


これが私の受信機のマニフェストです

<service android:name=".MyService" android:enabled="true"/>
 <receiver android:name="AppReceiver">
            <intent-filter android:priority="2147483647">
                <action android:name="android.provider.Telephony.SMS_SENT"/>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
 <receiver>
<service android:name=".MyServiceSentReceived" android:enabled="true"/>
 <receiver android:name="AppReceiver">
                <intent-filter android:priority="2147483645">
                    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                </intent-filter>
 </receiver>

ブロードキャストレシーバーがイベントをログに記録すると、アプリがクラッシュします。私はそれを舞台裏で実行させて、私の主な活動からひもを引く必要があります。

誰かがこれを手伝ってくれるか、正しい方向に私を向けることができますか?

4

1 に答える 1

3

コメントとチャットからの追加

インテントにバンドルエクストラownAddressのキーを持つ文字列がない限り、文字列は常にnullになります。OSが。という名前の文字列エクストラを提供しないため、passAddressReceiverがインテントをキャッチするたびに(、、、またはからSMS_SENTSMS_RECEIVEDBOOT_COMPLETEDnullになります。それが物事をクリアすることを願っています。ownAddresspassAddress

元の回答

私はDroidGapを使用していませんが、これは通常のAndroidアクティビティに必要なものです。

アクティビティ:

public class AppActivity extends Activity {
    AppReceiver mAppReceiver = new AppReceiver();

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        registerReceiver(mAppReceiver, new IntentFilter("MyReceiver"));

        String string = "Pass me.";
        Intent intent = new Intent("MyReceiver");
        intent.putExtra("string", string);
        sendBroadcast(intent);
    }
}   

受信者:

public class AppReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, intent.getStringExtra("string"), Toast.LENGTH_LONG).show();
    }
}

次のように、onDestroy()でレシーバーの登録を解除することを忘れないでください。

@Override
protected void onDestroy() {
    unregisterReceiver(mAppReceiver);
    super.onDestroy();
}
于 2012-08-06T20:04:39.923 に答える