1

私は多くの異なる例を試しましたが、(長い) 時間が経過した後、(サービス経由で) 通知を受けた後、BroadcastReceiver からログを (ほぼ) 受信することができました。それでも、問題は解決しません。

apk をインストールするか、ビルドして USB で実行すると、BroadcastReceiver は意図を受け取りません。アプリケーションを手動で何十回も実行しようとした後、電話を再起動 (電源のオン/オフ) しましたが、何もありませんでした。その後、adbシェルでデバッグしようとしました:

adb シェル AM ブロードキャスト -a android.intent.action.BOOT_COMPLETED -n com.myapp.example/.BootCompletedReceiver

そして、ほら!出来た。再起動で確認しました-うまくいきました!その後、アプリケーションを再インストールしましたが、やはり機能しませんでした。adb shell を試した後、すべてが機能しています。それが機能するようにシームが動作するはずですが、最初に上から adb shell コマンドを実行した後でのみです。

私はAVDを試しませんでした(私のマシンでは遅すぎます).HTC ONEだけで試しました.

これは私のマニフェストです:

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

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppThemeWhiteActionBar" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"

        android:screenOrientation="portrait"
        android:theme="@style/AppThemeWhite" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    ...
    <receiver android:name=".BootCompletedReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        </intent-filter>
    </receiver>
    <receiver android:name=".util.AlarmReceiver"/>
    <service android:name=".NotifyingDailyService" >
    </service>
</application>

そして、それらは BootCompletedReceiver と NotifyingDailyService です (ここの多くの例とほぼ同じです):

public class BootCompletedReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent arg1) {
    Log.w("boot_broadcast_poc", "starting service...");
    context.startService(new Intent(context, NotifyingDailyService.class));
}

}

public class NotifyingDailyService extends Service {

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int onStartCommand(Intent pIntent, int flags, int startId) {
    NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    Notification.Builder builder = new Notification.Builder(this);
    builder.setSmallIcon(R.drawable.ic_launcher);
    builder.setContentTitle(getString(R.string.random_string));
    builder.setContentText(getString(R.string.random_string));
    builder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS);
    mNotificationManager.notify(12345, builder.build());
    return super.onStartCommand(pIntent, flags, startId);
}
}
4

2 に答える 2

0

Android でスタートアップ アプリケーションを制限するオプションがあります。あなたのアプリケーションも制限されていると思います。[設定] -> [個人] -> [スタートアップ マネージャー] に移動します。そこでは、boot_completed ブロードキャストの受信を許可または制限できます。

于 2016-08-07T01:50:55.207 に答える