intent

Android - java.lang.IllegalArgumentException: Receiver not registered

匿名 (未验证) 提交于 2019-12-02 21:52:03
java.lang.IllegalArgumentException: Receiver not registered 从平台上可以看到Crash的错误问题, 出现了以下这条 java.lang.IllegalArgumentException: Receiver not registered 明明我OnResume有注册、OnPause有移除。 但为什么会发生这个问题 private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { ... doSomeThing } }; BroadcastReceiver这样命 onResume如下 @Override protected void onResume() { super.onResume(); registerReceiver(mReceiver, new IntentFilter("filter_action")); } onPause如下 @Override protected void onPause() { super.onPause(); unregisterReceiver(mReceiver); } 但会出现如下的错误消息

Android 轮询最佳实践 Service + AlarmManager+Thread

一曲冷凌霜 提交于 2019-12-02 21:39:30
android中涉及到将服务器中数据变化信息通知用户一般有两种办法, 推送 和 轮询 。 消息推送是服务端主动发消息给客户端,因为第一时间知道数据发生变化的是服务器自己,所以推送的优势是实时性高。但服务器主动推送需要单独开发一套能让客户端持久连接的服务端程序,不过现在已经有很多开源的代码实现了基于xmmp协议的推送方案,而且还可以使用谷歌的推送方案。但有些情况下并不需要服务端主动推送,而是在一定的时间间隔内客户端主动发起查询。 譬如有这样一个app,实时性要求不高,每天只要能获取10次最新数据就能满足要求了,这种情况显然轮询更适合一些,推送显得太浪费,而且更耗电。 但是不管是轮询还是推送都需要 无论应用程序是否正在运行或者关闭 的情况下能给用户发送通知,因此都需要用到service。我们有两种方案来使用service达到此目的: 方案一:service + Thread 在service中开启一个带有while循环的线程,使其不断的从服务器查询数据(一定时间间隔内),当发现有需要通知用户的情况下发送notification。这种方案的代码大致是: import org.apache.http.Header; import org.json.JSONObject; import android.app.Notification; import android.app

android有用代码片段 1

大憨熊 提交于 2019-12-02 21:38:21
一、 获取系统版本号: PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0); int versionCode=nfo.versionCode string versionName=info.versionNam 二、获取系统信息: <SPAN style="FONT-SIZE: 16px">String archiveFilePath="sdcard/download/Law.apk";//安装包路径 PackageManager pm = getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES); if(info != null){ ApplicationInfo appInfo = info.applicationInfo; String appName = pm.getApplicationLabel(appInfo).toString(); String packageName = appInfo.packageName; //得到安装包名称 String version=info

第七次作业(2)

拥有回忆 提交于 2019-12-02 19:08:32
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="60dp" android:layout_marginLeft="20dp" android:layout_marginTop="60dp" android:layout_marginRight="20dp" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="手机号码:" android:textColor="@android

Activity 初步(大部分翻译自SDK)

妖精的绣舞 提交于 2019-12-02 17:45:58
(内容:如何创建、使用activity; activity生命周期。) Activity Activity 是一个为用户提供交互接口的组件,每个 activity 都会有一个 window 来显示自己的界面。 应用可以由多个互相“弱关联”的 activity 组成, activity 可以启动另外一个 activity , 有 activity 启动的时候,当前的就会被暂停,系统把被暂停的 activity 存储在一个 FILO (先进后出)的栈中,当用户点击“ back ”时,位于栈顶的 activity 就会重新被显示出来。 Activity 提供一系列的接口,在生命周期运行到特定的阶段时会通知相应的接口,用户在这些回调接口中做当前阶段的处理。例如,在 create 时初始化应用的资源, stop 时作资源的释放。 1 创建 Activity 创建一个 activity 必须继承为 Activity 的子类,并覆盖所需要生命周期的回调方法。比较重要的 2 个方法: onCreate(): 系统在创建 activity 时会调用,必须要覆盖的方法。应该在此阶段做初始化工作,layout一定要在这里被初始化:调用 setContentView() 设置 activity 的界面。 onPause(): 用户离开这个 activity 时系统调用的第一个方法

Android 广播

泄露秘密 提交于 2019-12-02 17:14:44
DialRecordReceiver.java public class DialRecordReceiver extends LocalBroadcastReceiver { public DialRecordReceiver(Context context) { super(context); } @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); String jsonString = intent.getStringExtra("json"); if (action.equals(LocalAction.DIAL_RECORD_ACTION_BE_INVITED)) { Log.d("panzq", "【====jsonString = 】" + jsonString); } } } LocalBroadcastReceiver.java public abstract class LocalBroadcastReceiver extends BroadcastReceiver { private final Context context; public LocalBroadcastReceiver(Context

第七次作业--手机充值

我与影子孤独终老i 提交于 2019-12-02 16:59:26
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.example.task.MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android

封装BaseActivity

南笙酒味 提交于 2019-12-02 15:17:37
BaseActivity import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.net.ConnectivityManager; import android.net.NetworkRequest; import android.os.Build; import android.os.Bundle; import android.view.View; import android.view.WindowManager; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import com.eshuix.javademo.NetworkCallbackImpl; import com.eshuix.javademo.utli.LoadDialog; public abstract class

Android广播机制

邮差的信 提交于 2019-12-02 12:10:19
一、简介 Android中的每个app都可以对自己感兴趣的广播进行注册,这样程序就只会接收到自己关心的广播内容,这些广播可能是来自系统的,也可能来自其他应用程序。发送广播要用到 Intent ,接收广播要用到 BroadcastReceiver 二、Android中广播的类型 1、标准广播 标准广播是一种 异步执行 的广播,在广播发出之后, 所有BroadcastReceiver几乎会在同一时刻接收到这条广播消息 ,因此它们之间没有先后顺序可言。 优点:效率高 缺点:无法截断 2、有序广播 有序广播是一种 同步执行 的广播,在广播发出之后, 同一时刻只会有一个BroadcastReceiver接收到这条消息 ,当这个BroadcastReceiver执行完毕之后,广播才会继续传递。 因此这种方式下,BroadcastReceiver是有先后顺序的,优先级高的BroadcastReceiver就能先收到广播消息,并且前面的BroadcastReceiver还可以截断广播,让后面的接收器无法收到。 三、如何接收广播 Android中有很多系统级别的广播,比如手机开机之后发出一条广播、电池电量变化会发出一条广播,我们可以在app中通过监听这些广播来得到系统的状态信息,要想接收这些广播,就得使用 广播接收器 。 广播接收器可以自由的对自己感兴趣的广播进行注册,当有相应的广播发出时

Android ViewPager使用详解

為{幸葍}努か 提交于 2019-12-02 08:16:25
这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等。那如何使用它呢,与LisstView类似,我们也需要一个适配器,他就是PagerAdapter。看一下api的图片, ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。分三个步骤来使用它: 1.在住布局文件里加入 <android.support.v4.view.ViewPager 这个组件,注意这个组件是用来显示左右滑动的界面的,如果不加载xml布局文件,他是不会显示内容的。 android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" > 2.加载要显示的页卡, LayoutInflater lf = getLayoutInflater().from(this); view1 = lf.inflate(R.layout.layout1, null); view2 = lf.inflate(R.layout.layout2, null); view3 = lf