0

Bluetooth接続を登録するときにAndroidにアクティビティを起動させようとしています.適切な権限がすべてあり、このコードはインテントを起動する必要がある時点まで正常に実行されます. その後、それはクラッシュします。現在、電話でのライブ テスト中のため、これに対する logcat はありません。

それでは、「どうすればこれを修正できますか?」という別のゲームをプレイしましょう。

public class detectService extends Service {

public void onCreate() {
    IntentFilter filter1 = new IntentFilter(
            BluetoothDevice.ACTION_ACL_CONNECTED);
    this.registerReceiver(mReceiver, filter1);
    Toast.makeText(this, "Starting Service!", Toast.LENGTH_LONG).show();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}

// The BroadcastReceiver that listens for bluetooth broadcasts
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        BluetoothAdapter device = intent
                .getParcelableExtra(BluetoothDevice.ACTION_ACL_CONNECTED);

        if (device.equals(action)) {
            // Device is now connected
            // Start Second Activity
            Intent otherIntent = new Intent(detectService.this,
                    otherClass.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(otherIntent);
        }
    };
};
@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
}

ここにいる誰かの助けのおかげで、今では私の電話に logcat があります! エラーのコピーは次のとおりです。

E/AndroidRuntime(  567): FATAL EXCEPTION: main
E/AndroidRuntime(  567): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.bluetooth.device.action.ACL_CONNECTED (has extras) } in lionsimages.com.bluetoothalert.detectService$1@4051ad68
E/AndroidRuntime(  567):    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:722)
E/AndroidRuntime(  567):    at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime(  567):    at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(  567):    at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime(  567):    at android.app.ActivityThread.main(ActivityThread.java:3683)
E/AndroidRuntime(  567):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  567):    at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(  567):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
E/AndroidRuntime(  567):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
E/AndroidRuntime(  567):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  567): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  567):    at lionsimages.com.bluetoothalert.detectService$1.onReceive(detectService.java:39)
E/AndroidRuntime(  567):    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:709)
E/AndroidRuntime(  567):    ... 9 more
4

3 に答える 3

2

これを試して:

 if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
            // Device is now connected
            // Do your stuff here
        }
于 2012-10-12T18:49:17.860 に答える
1

あなたのonReceive()方法では、これを行います:

   BluetoothAdapter device = intent
            .getParcelableExtra(BluetoothDevice.ACTION_ACL_CONNECTED);

でも、今回の放送ではその名前のオマケはありませんIntent。からデバイスを取得する場合はIntent、代わりにこれが必要です。

   BluetoothDevice device = intent
            .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

ただし、コードを見ると、インテントACTIONACTION_ACL_CONNECTED. それだけの場合は、代わりに次のコードを使用します。

public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();

    if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
        // Device is now connected
        // Start Second Activity
        Intent otherIntent = new Intent(detectService.this,
                otherClass.class);
        // NOTE: I changed "intent" to "otherIntent" in the following line as well!
        otherIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(otherIntent);
    }
};
于 2012-10-12T19:01:30.697 に答える
0

このコードを使用します。場合によっては、ブロードキャスト レシーバー コードを正常に完了して実行するためにも必要です。

    if( "android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) 
      { 
                  //You broad cast activity code ...
       }
于 2012-10-12T18:00:21.123 に答える