6

1つのブロードキャストレシーバーのみで構成される(他には何もない)アプリケーションをAndroidで作成しようとしています。

ブロードキャストレシーバーは、単にブロードキャストをキャッチする必要があります(たとえば、受信したSMSメッセージ、情報をログに記録して終了します)。ただし、次のAndroidManifest.xmlに表示されるように、メインアクティビティがあることを示さない限り、ブロードキャストがレシーバーによってキャッチされないことに気付きました。

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

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />

<uses-permission android:name="android.permission.RECEIVE_SMS" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <receiver android:name="com.myapp.MyBroadcastReceiver" >
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

    <activity
        android:name="com.myapp.MainActivity"
        android:label="@string/activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

アプリケーション内にActivityクラスを含める必要はありません。また、インテントフィルターでandroid.intent.category.LAUNCHERまたは android.intent.action.MAINのいずれかを削除しても、問題は発生しません。動作は、Android4.2を実行している私の電話とエミュレーターで同じです

私のBroadcastreceiverクラスは次のようになります。

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,intent.getAction(),Toast.LENGTH_SHORT).show();
    }
}

ブロードキャストレシーバーだけでアプリを作成することはできませんか?

4

2 に答える 2

6

Android 3.1(API 12)以降、アプリのUIコンポーネント(アクティビティ)がユーザーによって少なくとも1回手動で開かれるまで、アプリはブロードキャストを受信できません。ユーザーがアプリケーションを強制的に停止しても、同じことが適用されます。

参照:http ://developer.android.com/about/versions/android-3.1.html#launchcontrols

于 2013-03-27T10:51:41.520 に答える
0

アプリケーションの代わりにサービスを作ってみませんか?(私はサービスを作成したことがありませんが、あなたの場合はもっと適切だと思います)

于 2013-03-27T10:15:49.883 に答える