摇动设备以启动应用程序

时间:2014-03-11 08:01:22

标签: java android shake

我正在使用this与Shake合作,这对我来说很好用,但我想在用户摇动设备时启动应用程序, 看下面的代码:

 @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    transcript=(TextView)findViewById(R.id.transcript);
    scroll=(ScrollView)findViewById(R.id.scroll);

    shaker=new Shaker(this, 1.25d, 500, this);
  }

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

    shaker.close();
  }

  public void shakingStarted() {
    Log.d("ShakerDemo", "Shaking started!");
    transcript.setText(transcript.getText().toString()+"Shaking started\n");
    scroll.fullScroll(View.FOCUS_DOWN);
  }

  public void shakingStopped() {
    Log.d("ShakerDemo", "Shaking stopped!");
    transcript.setText(transcript.getText().toString()+"Shaking stopped\n");
    scroll.fullScroll(View.FOCUS_DOWN);
  }

所以这是我的问题,如何通过摇动我的设备启动应用程序?

4 个答案:

答案 0 :(得分:3)

您应该编写Android服务,以便在摇动期间开始您的活动。就这些。即使活动不可见,服务也会在后台运行

可以开始服务,例如。在设备启动期间。这可以使用BroadCastReceiver来实现。

<强>清单:

<application ...>
    <activity android:name=".ActivityThatShouldBeLaunchedAfterShake" />
    <service android:name=".ShakeService" />
    <receiver android:name=".BootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
    </receiver>
</application>

<强> BootReceiver:

public class BootReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        Intent intent = new Intent(context, ShakeService.class);
        context.startService(intent);
    }
}

<强>服务

public class ShakeService extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    ... somewhere
    if(shaked) {
        Intent intent = new Intent(getApplicationContext(), ActivityThatShouldBeLaunchedAfterShake.class)
            .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
}

答案 1 :(得分:2)

Shake detection撰写单独的应用。在检测到震动时,使用应用程序包的名称触发一个意图,您要启动:

Intent intent = new Intent (<PackageNameOfAppToBeLaunched>);     
startActivity (intent);

答案 2 :(得分:2)

你需要的是两个不同的活动,其中第一个检测到需要在后台运行的Shake,而不是调用你想要运行的新实际应用程序。

您可以运行您必须使用的课程后台活动,这会使您的活动在后台长时间运行(连续)您可以使用类似FutureTaskExecutor的课程(您可以不为此使用AsyncTask

每当线程将命令传递给您的应用程序后,在Shake后,后台进程停止并且命令进入应用程序意味着您需要在实际应用程序关闭后立即再次立即启动后台进程。

答案 3 :(得分:1)

您需要编写代码,以便在摇动开始时将应用程序从后台启动到前台。这个link将帮助您这样做。