0

アプリケーションのインストール時にサウンドを鳴らしたい。アプリケーションでブロードキャストレシーバーを使用してこれを試しました。ブロードキャスト レシーバーでは、メディア プレーヤーを開始するサービスを実行しています。しかし、ブロードキャストレシーバーの受信方法に入ることができません。しかし、別のアプリをインストールしようとすると、イベントが発生します。私のアプリでのみイベントを取得する方法。マニフェスト ファイルの私の権限

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

<receiver android:name=".DemoReceiver" >
        <intent-filter >
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_INSTALL" />
             <action android:name="android.intent.action.PACKAGE_CHANGED" />
              <action android:name="android.intent.action.PACKAGE_RESTARTED" />               
    <action android:name="android.intent.action.PACKAGE_REPLACED"/>

    <action android:name="android.intent.action.USER_PRESENT"/>
    <data android:scheme="package"/>
        </intent-filter>
    </receiver>

そして放送受信機で

import android.content.BroadcastReceiver;

android.content.Context をインポートします。android.content.Intent をインポートします。

public class DemoReceiver extends BroadcastReceiver {
     @Override
     public void onReceive(final Context context, final Intent bootintent) {
         System.out.println("entered broadcast receiver");
           if(bootintent.getAction() != null)
         {               
              context.startService(new Intent(context, DemoService.class));
         }

     }
     }

そしてサービスは

public class DemoService extends Service {

 MediaPlayer player;


 private class LogTask extends TimerTask {
  public void run() {
   Log.i(LOGTAG, "scheduled");
  }
 }
 private LogTask mLogTask;

 @Override
 public IBinder onBind(final Intent intent) {
  return null;
 }

 @Override
 public void onCreate() {
  super.onCreate();
  Log.v("StartServiceAtBoot", "StartAtBootService Created");
  player=MediaPlayer.create(this, R.raw.sirensound);
  player.setLooping(false);
 }

 public void onStart(Intent intent, int flags, int startId) {

       Log.v("StartServiceAtBoot", "StartAtBootService -- onStartCommand()");        


       player.start();


      }
 @Override
      public void onDestroy() {
            super.onDestroy();

            Log.v("StartServiceAtBoot", "StartAtBootService Destroyed");

      }

}
4

3 に答える 3

1

アプリからコードを実行する場合は、すでにインストールされている必要があるため、アプリのインストール時にアプリからのブロードキャストを受信できないと思います。

于 2012-04-30T05:59:45.103 に答える
1

私のアプリケーションでは、アプリケーションの実行中にユーザーがデバイスを振ったときに音を出すことができました....

public class SensorTest extends Activity implements SensorEventListener,
    OnCompletionListener {
private SensorManager sensorManager;
private boolean color = false;
private long lastUpdate;
private MediaPlayer mMediaplayer;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    sensorManager.registerListener(this, sensorManager
            .getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL);
    lastUpdate = System.currentTimeMillis();
}

public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        float[] values = event.values;

        float x = values[0];
        float y = values[1];
        float z = values[2];

        float accelationSquareRoot = (x * x + y * y + z * z)
                / (SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH);
        long actualTime = System.currentTimeMillis();
        if (accelationSquareRoot >= 2) //
        {
            if (actualTime - lastUpdate < 200) {
                return;
            }
            lastUpdate = actualTime;

            if (color) {

            } else {

                try {

                    AssetFileDescriptor afd = getAssets().openFd(
                            "gavel_single.wav");
                    mMediaplayer = new MediaPlayer();
                    mMediaplayer.setDataSource(afd.getFileDescriptor(), afd
                            .getStartOffset(), afd.getLength());
                    afd.close();
                    mMediaplayer.prepare();
                    mMediaplayer.start();

                } catch (Exception e) {
                    e.printStackTrace();
                }

            }

        }

    }

}

public void onAccuracyChanged(Sensor sensor, int accuracy) {
    // TODO Auto-generated method stub

}

@Override
protected void onResume() {
    super.onResume();
    // register this class as a listener for the orientation and
    // accelerometer sensors
    sensorManager.registerListener(this, sensorManager
            .getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected void onPause() {
    // unregister listener
    sensorManager.unregisterListener(this);
    super.onStop();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mMediaplayer != null) {
        mMediaplayer.release();
        mMediaplayer = null;
    }

}

public void onCompletion(MediaPlayer mp) {
    mp.seekTo(0);
    mp.release();

}

}

于 2012-04-30T06:03:05.247 に答える
0

少なくとも通常のソースから配布する場合は、標準のAndroidプラットフォームではこれを行うことはできません(自分のサーバーでjavascriptとapkへのリンクを含むWebページを開くことで何かを行うことができるかもしれませんが、ユーザーは最初に設定で「不明なソース」を有効にします)

ただし、最初の実行時にサウンドを再生することはできます。ただし、インストールは、ユーザーがインストーラーから「開く」をクリックするか、ホーム画面などから起動した場合にのみ実行されます。

于 2012-04-30T06:05:43.483 に答える