AndroidBroadcastReceiverが起動しない

Some1Else

このコードは、古いAndroidバージョンで正常に機能していました。最新のAndroidStudioで更新すると、機能しなくなりました。

クラスの1つからメインアクティビティに単純な文字列を送信しようとしています。

マニフェストで受信者を宣言します...

<receiver android:name="com.domain.appname.MainActivity$MyReceiver">
<intent-filter>
<action android:name="MY_ACTION"/>
</intent-filter>
</receiver>

インテントを使用してブロードキャストを送信しようとしたとき。これは、場所が変更されたと検出されたときです

private class LocationListener implements android.location.LocationListener
{
    Location mLastLocation;

    public LocationListener(String provider)
    {
        mLastLocation = new Location(provider);
    }

    @Override
    public void onLocationChanged(Location location)
    {
        addStats("onLocationChanged - "+mLastLocation.getLatitude()+" "+mLastLocation.getLongitude()+" "+mLastLocation.getAccuracy()+" "+mLastLocation.getSpeed());
        mLastLocation.set(location);
        //send latitude, longitude and accuracy as broadcast to main activity
        Intent intent = new Intent();
        intent.setAction(MY_ACTION);
        intent.putExtra("DATAPASSED", mLastLocation.getLatitude()+" "+mLastLocation.getLongitude()+" "+mLastLocation.getAccuracy()+" "+mLastLocation.getSpeed());
        sendBroadcast(intent);
        addStats("after sendBroadcast");
    }

    @Override
    public void onProviderDisabled(String provider){}

    @Override
    public void onProviderEnabled(String provider){}

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras){}
}

そこにあるaddStats行はデバッグ用であり、すべて起動します。つまり、新しいlong / latを検出するための統計が表示され、「after sendBroadcast」メッセージが表示されるため、そのコードがブロードキャストを送信している(または送信しようとしている)ように見えます。

今私の主な活動では、これを受信者として持っています...

//receives the broadcasts from the MyLocationService service
public static class MyReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        addStats("inside onReceive");
        String datapassed = arg1.getStringExtra("DATAPASSED");
    }
}

それがトリガーされることはありません。「insideonReceive」メッセージが表示されません。

私が見逃しているかもしれないアイデアはありますか?多くのstackoverflowとgoogleの結果を経験しましたが、これを機能させるために必要なのは上記のようです。以前は問題なく動作していましたが(Androidのバージョン26かもしれません)、このアプリを新しいOSバージョンで実行しようとしています。

確執

おそらく、明示的なインテントを使用する必要があります。https://stackoverflow.com/a/49197540/383676を参照してください

ただし、同じアプリ内でブロードキャストしている場合は、https//developer.android.com/reference/android/support/v4/content/LocalBroadcastManager#sendBroadcast(android.content.Intent)を使用することをお勧めします。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事