public class MainActivity extends AppCompatActivity { private EditText numberEditText; private Button sendButton; private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int result = intent.getIntExtra("factorial", 0); textView.setText("Factorial: " + result); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); numberEditText = findViewById(R.id.numberEditText); sendButton = findViewById(R.id.sendButton); sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int number = Integer.parseInt(numberEditText.getText().toString()); Intent intent = new Intent("com.example.FACTORIAL_ACTION"); intent.putExtra("number", number); sendBroadcast(intent); } }); } @Override protected void onResume() { super.onResume(); IntentFilter filter = new IntentFilter("com.example.FACTORIAL_ACTION"); registerReceiver(broadcastReceiver, filter); } @Override protected void onPause() { super.onPause(); unregisterReceiver(broadcastReceiver); } }
时间: 2024-02-14 09:31:33 浏览: 163
这段代码是一个示例的 MainActivity 类,它包含了一个 EditText、一个 Button 和一个 BroadcastReceiver。
在这段代码中,我们首先定义了一个 BroadcastReceiver,它的作用是接收广播并执行相应的操作。
在 onCreate() 方法中,我们通过 findViewById() 方法获取了 numberEditText 和 sendButton 的引用,并为 sendButton 设置了一个点击事件监听器。当用户点击按钮时,会从 numberEditText 中获取输入的数字,并创建一个带有自定义 action 的 Intent,并将数字作为额外的数据放入 Intent 的 extras 中。然后,通过 sendBroadcast() 方法发送广播。
在 onResume() 方法中,我们创建了一个 IntentFilter,并将自定义 action 添加到过滤器中。然后,调用 registerReceiver() 方法注册广播接收器,并将过滤器作为参数传递。这样,当有匹配的广播发送时,广播接收器的 onReceive() 方法就会被调用。
在 onPause() 方法中,我们调用 unregisterReceiver() 方法取消注册广播接收器,以避免内存泄漏。
总结一下,这段代码演示了一个 Activity 发送广播的过程,以及如何注册和取消注册广播接收器来接收广播并执行相应的操作。
相关问题
Android应用程序开发BroadcastReceiver编程作业编写一个程序,实现简单的短信收发操作
以下是一个简单的 Android 应用程序开发 Broadcast Receiver 编程作业,实现短信收发操作的示例代码:
1. 创建一个新的 Android 项目并添加以下权限到 AndroidManifest.xml 文件中:
```xml
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
```
2. 创建一个名为 SMSReceiver 的类,它继承 BroadcastReceiver 并重写 onReceive() 方法。在该方法中,我们可以获取短信消息并在控制台上输出它们:
```java
public class SMSReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObj = (Object[]) bundle.get("pdus");
if (pdusObj != null) {
for (Object pduObj : pdusObj) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pduObj);
String senderNum = currentMessage.getDisplayOriginatingAddress();
String message = currentMessage.getDisplayMessageBody();
Log.i("SMSReceiver", "Sender: " + senderNum + " Message: " + message);
}
}
}
}
}
}
```
3. 在 MainActivity 中,我们可以使用以下代码来发送短信消息:
```java
public class MainActivity extends AppCompatActivity {
private static final int MY_PERMISSIONS_REQUEST_SEND_SMS = 0;
private Button sendButton;
private EditText phoneEditText;
private EditText messageEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendButton = findViewById(R.id.send_button);
phoneEditText = findViewById(R.id.phone_edit_text);
messageEditText = findViewById(R.id.message_edit_text);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String phone = phoneEditText.getText().toString();
String message = messageEditText.getText().toString();
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.SEND_SMS}, MY_PERMISSIONS_REQUEST_SEND_SMS);
} else {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phone, null, message, null, null);
Toast.makeText(MainActivity.this, "Message sent!", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == MY_PERMISSIONS_REQUEST_SEND_SMS) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
sendButton.performClick();
} else {
Toast.makeText(MainActivity.this, "SMS permission denied.", Toast.LENGTH_SHORT).show();
}
}
}
}
```
4. 最后,我们需要在 AndroidManifest.xml 文件中注册 SMSReceiver 类:
```xml
<receiver android:name=".SMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
```
这是一个简单的 Android 应用程序开发 Broadcast Receiver 编程作业,实现短信收发操作的示例代码。
1. 编程实现Intent的显示跳转。在MainActivity中定义Intent,启动SeconActivity,能够获取SecondActivity的返回值; 2、使用Intent过滤器实现隐式跳转。在MainActiviy中定义Intent,要求必须用到自定义的action、category、data来启动ThirdActivity; 3. 实现通过Intent调用android内置浏览器; 4. 通过Intent实现广播消息的接收。在MainActivity中定义Intent,将界面上某文本框中的内容以广播消息的形式发出。广播消息可以使用Toast或Logcat。
1. 显示跳转并获取返回值:
在 MainActivity 中定义 Intent,并使用 startActivityForResult() 方法启动 SecondActivity。在 SecondActivity 中设置返回结果,并使用 setResult() 方法返回结果。在 MainActivity 中重写 onActivityResult() 方法获取返回结果。
MainActivity.java:
```java
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE = 1;
private TextView resultTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button goToSecondButton = findViewById(R.id.go_to_second_button);
resultTextView = findViewById(R.id.result_text_view);
goToSecondButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK && data != null) {
String result = data.getStringExtra(SecondActivity.EXTRA_RESULT);
resultTextView.setText(result);
}
}
}
```
SecondActivity.java:
```java
public class SecondActivity extends AppCompatActivity {
public static final String EXTRA_RESULT = "com.example.myapplication.RESULT";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Button returnButton = findViewById(R.id.return_button);
returnButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String result = "Hello, MainActivity!";
Intent intent = new Intent();
intent.putExtra(EXTRA_RESULT, result);
setResult(RESULT_OK, intent);
finish();
}
});
}
}
```
2. 使用 Intent 过滤器实现隐式跳转:
在 MainActivity 中定义 Intent,并设置自定义的 action、category、data。在 ThirdActivity 的 AndroidManifest.xml 文件中使用 intent-filter 元素来指定响应的 Intent。
MainActivity.java:
```java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button goToThirdButton = findViewById(R.id.go_to_third_button);
goToThirdButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.example.myapplication.ACTION_THIRD");
intent.addCategory("com.example.myapplication.CATEGORY_THIRD");
intent.setData(Uri.parse("https://www.example.com"));
startActivity(intent);
}
});
}
}
```
ThirdActivity 的 AndroidManifest.xml:
```xml
<activity android:name=".ThirdActivity">
<intent-filter>
<action android:name="com.example.myapplication.ACTION_THIRD" />
<category android:name="com.example.myapplication.CATEGORY_THIRD" />
<data android:scheme="https" android:host="www.example.com" />
</intent-filter>
</activity>
```
ThirdActivity.java:
```java
public class ThirdActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
}
}
```
3. 通过 Intent 调用 Android 内置浏览器:
在 MainActivity 中定义 Intent,并使用 setData() 方法设置要打开的网址。然后使用 startActivity() 方法启动隐式 Intent,Android 系统会自动选择合适的应用程序打开该网址。
MainActivity.java:
```java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button openBrowserButton = findViewById(R.id.open_browser_button);
openBrowserButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = "https://www.example.com";
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
}
});
}
}
```
4. 通过 Intent 实现广播消息的接收:
在 MainActivity 中定义 Intent,并使用 sendBroadcast() 方法将广播消息发送出去。然后在 BroadcastReceiver 的 onReceive() 方法中接收广播消息,并使用 Toast 或 Logcat 打印出来。
MainActivity.java:
```java
public class MainActivity extends AppCompatActivity {
public static final String ACTION_MY_BROADCAST = "com.example.myapplication.ACTION_MY_BROADCAST";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button sendBroadcastButton = findViewById(R.id.send_broadcast_button);
sendBroadcastButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText editText = findViewById(R.id.edit_text);
String message = editText.getText().toString();
Intent intent = new Intent(ACTION_MY_BROADCAST);
intent.putExtra("message", message);
sendBroadcast(intent);
}
});
}
}
```
MyBroadcastReceiver.java:
```java
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
Log.d("MyBroadcastReceiver", message);
}
}
```
AndroidManifest.xml:
```xml
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.example.myapplication.ACTION_MY_BROADCAST" />
</intent-filter>
</receiver>
```
阅读全文