嗨,我正在通过我的服务中的SmsManager从我的应用程序发送消息,并为要发送和传递的短信注册广播接收器,我希望在消息到达或不到达时更新消息状态。按照现在,我可以通过将带有行ID的Extras放在带有flag的Pending Intent中来发送消息PendingIntent.FLAG_UPDATE_CURRENT。但是,一旦发送了消息,我将只接收广播事件以及最后一行的额外内容,而我无法检索其他行的额外内容。我正在使用PendingIntent.FLAG_UPDATE_CURRENT,这就是为什么其他函数被覆盖的原因,我也检查了其他标志,但没有用。如何在不被覆盖的情况下获得其他行的额外内容?我在服务中发送短信的另一件事是这种方法正确吗?任何建议都会有
很大帮助。
String mSelectionClause = MyContentprovider.STATUS+ " = ?";
String[] mSelectionArgs = {"fail"};
Uri students = MyContentprovider.CONTENT_URI_SENDMSG;
Cursor c = getContentResolver().query(students, null, mSelectionClause, mSelectionArgs, "userphno");
if (c.moveToFirst()) {
do{
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
Intent SENTINTENT=new Intent(SENT);
SENTINTENT.putExtra("id",c.getString(c.getColumnIndex( MyContentprovider._ID)));
SENTINTENT.putExtra("userno", c.getString(c.getColumnIndex( MyContentprovider.USER_PHNO)));
if(c.isLast()){
SENTINTENT.putExtra("lastrow", "true");
}
Intent DELIVEREDINTENT=new Intent(DELIVERED);
DELIVEREDINTENT.putExtra("id",c.getString(c.getColumnIndex( MyContentprovider._ID)));
DELIVEREDINTENT.putExtra("userno", c.getString(c.getColumnIndex( MyContentprovider.USER_PHNO)));
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
SENTINTENT, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
DELIVEREDINTENT, PendingIntent.FLAG_UPDATE_CURRENT);
String msg= c.getString(c.getColumnIndex( MyContentprovider.MESSAGE));
SmsManager sms …Run Code Online (Sandbox Code Playgroud) 我在使用IntentService的ContentProvider时遇到问题.
我计划在我的应用程序中使用IntentService在手机完成启动时重新安排一些警报,但首先我需要从ContentProvider中提取一些数据.根据这些 链接,我可以通过注册BroadcastReceiver并从那里启动IntentService来实现这一点.这就是我做的:
OnBootReceiver.java
public class OnBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent scheduleServiceIntent = new Intent(context, ScheduleService.class);
context.startService(scheduleServiceIntent);
}
Run Code Online (Sandbox Code Playgroud)
ScheduleService.java
public class ScheduleService extends IntentService implements Loader.OnLoadCompleteListener<Cursor> {
private AlarmManager alarmManager;
@Override
public void onCreate() {
super.onCreate();
alarmManager = (AlarmManager) this.getApplicationContext().getSystemService(Context.ALARM_SERVICE);
}
@Override
protected void onHandleIntent(Intent intent) {
String[] projection = new String[] {
Contract._ID,
Contract.START_TIME,
Contract.DATE,
Contract.NAME,
Contract.TYPE};
mCursorLoader = new CursorLoader(this, MyContentProvider.MyURI,
projection, selection, selectionArgs, SOME_ID);
mCursorLoader.registerListener(ID, this);
mCursorLoader.startLoading(); …Run Code Online (Sandbox Code Playgroud) android android-contentprovider android-broadcast android-intentservice
我正在尝试使用本地广播接收器在 editText 字段(位于片段内)内显示扫描的条形码。
这是我的代码:
MainActivity.java 中的 OnActivityResult
public void onActivityResult(int requestCode, int resultCode, Intent intent){
Log.d("onActivityResultCalled", "yes");
if(requestCode == IntentIntegrator.REQUEST_CODE){
if (resultCode == RESULT_OK){
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
Log.d("content", contents);
Log.d("format", format);
Log.d("sender", "Broadcasting message");
Intent scanIntent = new Intent("scanEvent");
scanIntent.putExtra("isbn",contents);
LocalBroadcastManager.getInstance(this).sendBroadcast(scanIntent);
}else if(resultCode == RESULT_CANCELED){
Log.e("MainActivity","Scan cancelled?");
}
}
}
Run Code Online (Sandbox Code Playgroud)
接收广播并显示 isbn 的代码:
@Override
public void onResume()
{
super.onResume();
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mMessageReceiver,
new IntentFilter("scanEvent"));
}
// Our handler for received Intents. This will be called whenever an …Run Code Online (Sandbox Code Playgroud) 我做了这个广播接收器
public class DateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("DATE RECEIVER", "OK");
}
}
Run Code Online (Sandbox Code Playgroud)
在清单中注册
<receiver
android:name=".DateReceiver"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="android.intent.action.DATE_CHANGED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
它在设备开启时工作,但如果我将其关闭并等待午夜过去,那么我就没有任何重新启动的意图。我应该如何得到它?
android date broadcastreceiver android-intent android-broadcast
我正在使用JobIntentService执行某些任务,在任务结束后我发送一个广播,我的活动之一也会监听该广播。
假设在 Android 操作系统关闭 Activity 以释放一些内存的情况下,如果从应用程序发送广播,JobIntentService是否OnCreate也会调用应用程序?
java service android android-broadcast android-application-class
我想声明一个广播接收器,它可以监听系统广播,例如PACKAGE_ADDED,,,PACKAGE_REPLACED例如
<receiver
android:name="com.sample.cli.xyz.XyzReceiver"
android:exported="true"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
如果我保留exported="true"在这里,任何应用程序都可以发送广播,这可能是一个安全问题。根据 Android 文档,如果我们在接收器标记中甚至有 1 个意图过滤器,那么导出的默认值将被视为“true”。
我的问题是,如果我明确将此属性声明为“false”( android:exported="false") 以及意图过滤器,是否会使其更安全并使其只能由系统而不是其他应用程序访问?
android broadcastreceiver android-broadcast android-broadcastreceiver
我有一个在 Manifest 和MapboxMapActivity中定义的不同进程中的服务,我只是想知道如何使用LocalBroadcastManager.
我试图将服务上下文传递给LocalBroadcastManager.getInstance()然后LocalBroadcast在我的活动中注册一个。它注册成功,但无法从我的服务中获取信息!
这是我的代码,在我的服务中...
Intent locationIntent = new Intent("LocationIntent");
locationIntent.setAction("updatedLocations");
locationIntent.putExtra("list",updatedList);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(locationIntent);
Run Code Online (Sandbox Code Playgroud)
...我在我的活动中注册它:
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceive``r(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Timber.tag("localB").d("registered!");
if (intent != null && intent.getAction() != null &&
intent.getAction().equals("updatedLocations")) {
sawLocationsList = (HashMap<Integer,
MarkerItem>)intent.getSerializableExtra("list");
Timber.tag("sawL").d("updated");
}
}
} , new IntentFilter("LocationIntent"));
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,我的服务发送广播,但我的活动没有收到广播消息!
我认为这个问题是因为我的服务是在我的清单中的另一个进程中定义的......
android:name=".services.ForegroundService"
android:enabled="true"
android:exported="false"
android:process=":ForegroundService"
Run Code Online (Sandbox Code Playgroud)
...但我想以这种方式进行交流,因为处于不同的过程有助于我实现电池效率目标。
java android android-activity android-broadcast localbroadcastmanager
我知道我可以通过从 BroadcastReceiver 调用它来启动启动活动,但是如果我想执行以下操作怎么办:
<activity
android:name="MyActivity"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
这可能吗?如何?
我使用以下示例实现了重复报警
但是,一旦警报"熄灭"/收到警报,我想ListView在活动状态中更新我的警报.我只有一个活动ListView.
收到警报后,如何在主活动类中执行更新UI方法?你如何onReceive()在AlarmReceiver(extends BroadcastReceiver)类中调用它
首先,我很抱歉我的英语不够好!
我的问题是我正在写一个块短信应用程序,我想收到短信与我的应用程序,然后我中止广播,使默认的短信应用程序无法接收短信,所以我设置我的应用程序具有最高优先级(1000),但我的应用程序仍然接收广播后Android的默认短信应用程序.
当我的手机收到短信时,我按顺序打印所有Android手机短信的广播接收信号,我发现系统短信应用程序首先接收短信广播,并且它也具有最高优先级.
那么如何让我的短信应用程序可以在默认短信系统之前接收短信广播?
我真的需要你的帮助!
感谢您的阅读!
我想要监控电池电量,如果达到一定水平,我想做一些事情.我担心的是不必要地耗尽太多电池.
使用服务将继续在后台运行.此外,如果我使用android.intent.action.BATTERY_CHANGED意图,它将检查电池级别的每一个变化.根据我的要求,这两种方法可能会耗尽不必要的电池.
因此,如果我使用AlarmManager(也是由OS处理的服务),它将检查每个用户定义的电池电量(适当的时间).
以下是我实施的代码.
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends Activity {
private AlarmManager mAlarmManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
mAlarmManager= (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intentAlarm = new Intent(this, AlarmReceiverTest.class);
// User defined time
long fiveMin= (AlarmManager.INTERVAL_FIFTEEN_MINUTES/3); // adjustment here
mAlarmManager.setRepeating(AlarmManager.RTC,
System.currentTimeMillis()+fiveMin, oneMin,
PendingIntent.getBroadcast(this,1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
}
}
Run Code Online (Sandbox Code Playgroud)
广播接收器:
public class AlarmReceiverTest extends BroadcastReceiver {
@Override
public void onReceive(Context pContext, Intent arg1) {
IntentFilter ifilter = new …Run Code Online (Sandbox Code Playgroud) java android broadcastreceiver alarmmanager android-broadcast
尝试从这里实现示例代码时,我得到空指针异常.我在第2点和第3点的"在设备启动时启动警报"部分中的示例代码有些令人困惑.这是触发警报的主要类和我的广播接收器类接收广播并触发动作,和我的清单文件.我的logcat空指针异常错误指向广播接收器类中的if块语句.我的问题是:
android broadcastreceiver alarmmanager android-alarms android-broadcast