标签: android-broadcast

发送短信,等待额外的意图覆盖

嗨,我正在通过我的服务中的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)

android android-service android-broadcast

1
推荐指数
1
解决办法
660
查看次数

使用IntentService中的ContentProvider

我在使用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

1
推荐指数
1
解决办法
870
查看次数

LocalBroadcastReciever 无法在片段中工作

我正在尝试使用本地广播接收器在 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)

android android-fragments android-broadcast

1
推荐指数
1
解决办法
1760
查看次数

Android:是否在设备重启时触发 android.intent.action.DATE_CHANGED?

我做了这个广播接收器

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

1
推荐指数
1
解决办法
4494
查看次数

如果收到广播,应用程序类 OnCreate 是否会被调用

我正在使用JobIntentService执行某些任务,在任务结束后我发送一个广播,我的活动之一也会监听该广播。

假设在 Android 操作系统关闭 Activity 以释放一些内存的情况下,如果从应用程序发送广播,JobIntentService是否OnCreate也会调用应用程序?

java service android android-broadcast android-application-class

1
推荐指数
1
解决办法
1419
查看次数

android:exported="false" 在声明了意图过滤器的广播接收器中

我想声明一个广播接收器,它可以监听系统广播,例如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

1
推荐指数
1
解决办法
2275
查看次数

如何在不同进程中使用 LocalBroadcastManager 在 Activity 和 Service 之间进行通信

我有一个在 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

1
推荐指数
1
解决办法
243
查看次数

在没有 BroadcastReceiver 的情况下在 BOOT_COMPLETED 上启动 Activity

我知道我可以通过从 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)

这可能吗?如何?

android broadcastreceiver android-broadcast android-studio

1
推荐指数
1
解决办法
212
查看次数

使用BroadcastReceiver更新活动的Activity UI

我使用以下示例实现了重复报警

但是,一旦警报"熄灭"/收到警报,我想ListView在活动状态中更新我的警报.我只有一个活动ListView.

收到警报后,如何在主活动类中执行更新UI方法?你如何onReceive()AlarmReceiver(extends BroadcastReceiver)类中调用它

android android-intent android-broadcast

0
推荐指数
1
解决办法
7236
查看次数

如何使我的短信应用程序是接收广播接收器的最高优先级

首先,我很抱歉我的英语不够好!

我的问题是我正在写一个块短信应用程序,我想收到短信与我的应用程序,然后我中止广播,使默认的短信应用程序无法接收短信,所以我设置我的应用程序具有最高优先级(1000),但我的应用程序仍然接收广播后Android的默认短信应用程序.

当我的手机收到短信时,我按顺序打印所有Android手机短信的广播接收信号,我发现系统短信应用程序首先接收短信广播,并且它也具有最高优先级.

那么如何让我的短信应用程序可以在默认短信系统之前接收短信广播?

我真的需要你的帮助!

感谢您的阅读!

android-broadcast

0
推荐指数
1
解决办法
4568
查看次数

适当优化的方法来监控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

0
推荐指数
1
解决办法
1684
查看次数

使用intent.action.BOOT_COMPLETED时获取空指针

尝试从这里实现示例代码时,我得到空指针异常.我在第2点和第3点的"在设备启动时启动警报"部分中的示例代码有些令人困惑.这是触发警报的主要类和我的广播接收器类接收广播并触发动作,和我的清单文件.我的logcat空指针异常错误指向广播接收器类中的if块语句.我的问题是:

  1. 我是否正确地将样本中的代码实现到我的项目中?如果没有,请给我一个正确的.因为我不想在设备重启时取消闹钟.我将不胜感激任何帮助,谢谢.

android broadcastreceiver alarmmanager android-alarms android-broadcast

0
推荐指数
1
解决办法
1088
查看次数