通过摇动手机启动未运行到前台的应用程序的特定活动

问题描述 投票:0回答:0

我正在制作一个应用程序,当我摇动设备时,一个活动会在前台启动。我使用了服务和 BroadcastReciever。我不知道我做错了什么

ShakeService.java

这是我实现传感器事件的服务类。


`

 public class ShakeService extends Service implements SensorEventListener {
    private SensorManager sensorManager;
    private Sensor accelerometer;
    private float acceleration;
    private float accelerationCurrent;
    private float accelerationLast;

    @Override
    public void onCreate() {
        super.onCreate();
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        acceleration = 10f;
        accelerationCurrent = SensorManager.GRAVITY_EARTH;
        accelerationLast = SensorManager.GRAVITY_EARTH;
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
        return START_STICKY;
    }
    
    @Override
    public void onSensorChanged(SensorEvent event) {
        float x = event.values[0];
        float y = event.values[1];
        float z = event.values[2];
    
        accelerationLast = accelerationCurrent;
        accelerationCurrent = (float) Math.sqrt((double) (x * x + y * y + z * z));
        float delta = accelerationCurrent - accelerationLast;
        acceleration = acceleration * 0.9f + delta;
    
        if (acceleration > 15) { // You can adjust the shake threshold as per your requirement
            Intent intent = new Intent(this, getCor_sendSms.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    }
    
    
    
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // Not used in this example
    }
    
    @Override
    public void onDestroy() {
        super.onDestroy();
        sensorManager.unregisterListener(this);
    }
    
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

}

`


ShakeReceiver.java

这是我的 BroadcastReciever 类

\`
public class ShakeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("ACTION_SHAKE")) {
            Intent activityIntent = new Intent(context, getCor_sendSms.class);
            activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(activityIntent);
        }
     }

     }

\`

清单文件

`

<activity android:name=".getCor_sendSms" />         
    <service android:name=".ShakeService" />         
    <receiver android:name=".ShakeReceiver"             
     android:exported="true">         
     <intent-filter>          
       <action android:name="com.example.shake" />            
       </intent-filter>     
    </receiver>`

get_cor_send_sms.java 这是我想在摇动设备时启动的活动 `


    Intent intent = new Intent(this, ShakeService.class);     
    startService(intent);`
java android service broadcastreceiver
© www.soinside.com 2019 - 2024. All rights reserved.