問題:
ACポートではなく、PCと判断された電源に電話を接続したときにコードを実行するアプリを作成しようとしています。また、このアプリに、ユーザーが同じコードを「強制的に」開始できるGUIインターフェイスを持たせたいと思います。
これまでに2つのクラスがあります。1つはメインアクティビティで、もう1つはBroadcastReceiverを拡張するクラスです。
コードは以下のとおりです。
MainActivity.java
public class MainActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void func1(View view){ //stuff }
public void func2(View view){ //stuff }
}
ChargingOnReceiver.java
public class ChargingOnReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
CharSequence text = "Plug status = " + isUSBConnected(context);
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
public static boolean isUSBConnected(Context context){
Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
return plugged == BatteryManager.BATTERY_PLUGGED_USB;
}
}
AndroidManifest.xml
<receiver android:name=".ChargingOnReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
</receiver>
副次的な質問:
簡単な最初の質問:ChargingOnReceiverからMainActivityのメソッド(func1やfucn2など)を呼び出すにはどうすればよいですか?たとえば、私のisUSBConnected()関数は以前はMainActivityにありましたが、ChargingOnReceiverから呼び出す方法が見つからなかったため、ChargingOnReceiverに移動しました。
主な質問:
コードは次のエラーでエラーになります:*致命的な例外:main :: java.lang.RuntimeException:レシーバーを起動できませんcom.example.ChargingOnReceiver:android.content.ReceiverCallNotAllowedException:IntentReceiverコンポーネントはインテントを受信するために登録できません*
レシーバーをレシーバー内に登録しようとしているので、なぜエラーが発生するのかは理解できますが、これを正しく行う方法を誰かに教えてもらえますか?