2

Androidアプリケーションは、アクティビティなしで受信機とサービスのみをブロードキャストできますか?これが可能な場合、どうすれば放送受信機を呼び出すことができますか?Androidシステムは自動的にbroadcsatレシーバーを呼び出しますか?

Broadcastreceiverのコード

  public class CheckReceiver extends BroadcastReceiver {

        public Context con;

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub

            Toast.makeText(context, "Received", Toast.LENGTH_LONG).show();
            // add PhoneStateListener
            PhoneCallListener phoneListener = new PhoneCallListener();
            TelephonyManager telephonyManager = (TelephonyManager) context
                    .getSystemService(Context.TELEPHONY_SERVICE);
            telephonyManager.listen(phoneListener,
                    PhoneStateListener.LISTEN_CALL_STATE);

            con = context;
                                }

        class PhoneCallListener extends PhoneStateListener {

            private boolean isPhoneCalling = false;

            String LOG_TAG = "LOGGING 123";

            @Override
            public void onCallStateChanged(int state, String incomingNumber) {

                if (TelephonyManager.CALL_STATE_RINGING == state) {
                    // phone ringing
                    Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
                }

                if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
                    // active
                    Log.i(LOG_TAG, "OFFHOOK");

                    isPhoneCalling = true;
                }

                if (TelephonyManager.CALL_STATE_IDLE == state) {
                    // run when class initial and phone call ended, need detect flag
                    // from CALL_STATE_OFFHOOK
                    Log.i(LOG_TAG, "IDLE");
                    if (isPhoneCalling) {
                        Log.i(LOG_TAG, "restart app");
                        Intent start = new Intent(con, CheckService.class);
                        con.startService(start);
                        isPhoneCalling = false;
                    }

                }
            }
        }
    }

サービスコードは

public class CheckService extends Service{

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

    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        super.onStart(intent, startId);
        Intent dialogIntent = new Intent(CheckService.this,SmartDialog.class);
        dialogIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(dialogIntent);


        //Toast.makeText(CheckService.this, "Serive", Toast.LENGTH_LONG).show();
    }

}

Androidマニフェストファイルは

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

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

    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

       <receiver android:name="CheckReceiver"></receiver>
        <service android:name="CheckService"></service>
        <activity android:name="SmartDialog" android:theme="@android:style/Theme.Dialog"></activity>
    </application>

このコードレシーバーを実行しようとすると、開始されません。どんな助けでも本当に役に立ちます

4

2 に答える 2

8

Honeycomb から、BroadcastReceivers は停止状態でインストールされ、アプリケーションが実際に実行されるまでトリガーされません。つまり、少なくとも 1 回はアクティビティを実行する必要があります。これについては、Commonsware のブログ投稿で詳しく説明されています。

ブロードキャストの後退が確認されました

アンドロイド 3.1

于 2012-09-07T09:39:19.783 に答える
0
public class FlashApkclass extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub

     }
}

manifest.xml ファイルで android:name を次のように設定します

<receiver android:name="com.example.ambrecentral.server.FlashApkclass"
                android:exported="false">
        <intent-filter>
         // register you broadcast receiver to list broadcast 
           <action android:name="com.example.android.APP_CLOUD_DELETE_APK"/>
        </intent-filter>

</receiver>

そして、あなたがブロードキャストしたい場合

broadcast.setAction(BROADCAST_ACTION);
sendBroadcast(broadcast);

BROADCAST_ACTION はどこにありますか

public static String BROADCAST_ACTION = "com.example.android.APP_CLOUD_DELETE_APK";    
于 2012-09-07T09:44:26.503 に答える