2017-01-30 6 views
0

これについては、これに関連して同様の質問がたくさんあるとは思いますが、まあまあではありません。非アクティビティクラス(Android)のonActivityResultを取得

スーパークラスを拡張しないBluetoothReaderクラスがあります。この呼び出しは、デバイス上でBluetoothが有効になっているかどうかをチェックし、そうでない場合はダイアログを表示します。

public class BluetoothReader { 

    private Activity activity; 

    public BluetoothReader(Activity activity){ 
    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
    this.activity = activity; 
    } 
} 

私はすべての作品

intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
activity.startActivityForResult(intent, REQUEST_ENABLE_BLUETOOTH); 

の下にコードの一部を使用してBluetoothをオンにしますが、今、私のジレンマはどのように私はこれと同じクラスで、このチェックの結果を得ないということです。

私がActivityスーパークラスを拡張していた場合、私はonActivityResultをオーバーライドしなければなりませんでした。

私が試した:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Doesn't work 
} 

任意のアイデア?

+0

私はあなたが正確にあなたが呼んでいる「道具」のJavaキーワード –

+0

を使うべきだと思いますstartActivityForResult ?? BluetoothReaderクラスでは? –

+0

onActivityResultは、このstartActivityForResultを呼び出すために使用されるアクティビティに実装されます。 –

答えて

1

アクティビティまたはフラグメントの外に結果が必要な場合、アクティビティクラスはonActivityResultをオーバーライドし、メソッド呼び出しによってその結果を他のクラスに渡す必要があります。あなたのBluetoothReaderクラスで

0

:あなたのメインで

public void onActivityResult(int requestCode, int resultCode, Intent result) { 
    //some code 
} 

、この機能にリダイレクト:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent result) { 
    super.onActivityResult(requestCode, resultCode, result); 
    BluetoothReader.onActivityResult(requestCode, resultCode, result); 
} 
+0

これは動作しません。あなたの提案された 'BluetoothReader' onActivityResult()'メソッドはインスタンスメソッドです。あたかも静的メソッドであるかのように呼びます。 – CommonsWare

+0

@CommonsWareあなたは正しいです、それは 'BluetoothReaderInstance'' OnActivityResult()'であるべきだと思いますか? –

+0

これは、「アクティビティ」のフィールドになるべきものが奇妙に大文字になります。アクティビティが 'BluetoothReader'インスタンス上でメソッドを呼び出す良い唯一の方法は、' Activity'がそのインスタンスを参照するフィールド(例えば、 'btReader')を持っているかどうかです。 – CommonsWare

関連する問題