10.30学习

android:exported

android:exported是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。

总体来说它的主要作用是:是否支持其它应用调用当前组件。
默认值:如果包含有intent-filter 默认值为true; 没有intent-filter默认值为false。

BroadcastReceiver 学习

程序启动BroadcastReceiver 的步骤

1.创建需要启动的BroadcastReceiver 的intent

2.调用context的sendBroadcast()或SendOrderedBroadcast()方法来启动指定的BroadcastReceiver。其中sendBroadcast发送的是普通广播,sendOrderedBroadcast发送的是有序广播。

创建BroadcastReceiver

第一步:创建BroadcastReceiver的子类:

​ 由于BroadcastReceiver本质上是一种监听器,所以创建BroadcastReceiver的方法也非常简单,只需要创建一个BroadcastReceiver的子类然后重写onReceive (Context context, Intentintent)方法即可。

1
2
3
4
5
6
7
8
9
10
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String msg=intent.getExtras().get("msg").toString();
Toast.makeText(context,"intent.getAction()"+intent.getAction().toString(),
Toast.LENGTH_LONG).show();
System.out.println("msg:"+msg);
}
}

第二步:注册BroadcastReceiver

一旦实现了BroadcastReceiver,接下就应该指定该BroadcastReceiver能匹配的Intent即注册BroadcastReceiver。注册BroadcastReceiver的方式有两种:

\第一种是静态注册**:这种方法是在配置AndroidManifest.xml配置文件中注册,通过这种方式注册的广播为常驻型广播,也就是说如果应用程序关闭了,有相应事件触发,程序还是会被系统自动调用运行。例如:

1
2
3
4
5
6
7
<!-- 在配置文件中注册BroadcastReceiver能够匹配的Intent -->
<receiver android:name="com.example.test.MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.MyBroadcastReceiver"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</receiver>

*\*第二种是动态注册****:这种方法是通过代码在.Java文件中进行注册。 通过这种方式注册的广播为非常驻型广播,即它会跟随 Activity 的生命周期,所以在 Activity 结束前我们需要调用 unregisterReceiver(receiver) 方法移除它。例如:

1
2
3
4
5
6
//通过代码的方式动态注册MyBroadcastReceiver
MyBroadcastReceiver receiver=new MyBroadcastReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("android.intent.action.MyBroadcastReceiver");
//注册receiver
registerReceiver(receiver, filter);

*\*注意:****如果我们在Activity中注册了BroadcastReceiver,当这个Activity销毁的时候要主动撤销注册否则会出现异常。 方法如下:

1
2
3
4
5
6
7
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//当Activity销毁的时候取消注册BroadcastReceiver
unregisterReceiver(receiver);
}

Android之standout(浮动窗口)

StandOut 是一个在Android应用中创建浮动窗口的框架,使用该框架可以方便的创建各种浮动窗口。可以指定窗口大小、放置的位置、是否可以拖动、是否可以最小化、可以在通知栏显示提示等等。

只要继承 wei.mark.standout.StandOutWindow类 ,重写(Override)各种函数即可。

1
2
3
4
5
6
7
8
9
10
11
12
public class FloatingFoldersLauncher extends Activity {  
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

StandOutWindow.closeAll(this, FloatingFolder.class);
FloatingFolder.showFolders(this);

finish();
}
}

实例项目StandOutExample:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class StandOutExampleActivity extends Activity {  
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

StandOutWindow.closeAll(this, SimpleWindow.class);
StandOutWindow.closeAll(this, MultiWindow.class);
StandOutWindow.closeAll(this, WidgetsWindow.class);

// show a MultiWindow, SimpleWindow

StandOutWindow
.show(this, SimpleWindow.class, StandOutWindow.DEFAULT_ID);
StandOutWindow.show(this, MultiWindow.class, StandOutWindow.DEFAULT_ID);
StandOutWindow.show(this, WidgetsWindow.class,
StandOutWindow.DEFAULT_ID);

// show a MostBasicWindow. It is commented out because it does not
// support closing.

/*
* StandOutWindow.show(this, StandOutMostBasicWindow.class,
* StandOutWindow.DEFAULT_ID);
*/

finish();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class MostBasicWindow extends StandOutWindow {  

@Override
public String getAppName() {
return "MostBasicWindow";
}

@Override
public int getAppIcon() {
return android.R.drawable.btn_star;
}

@Override
public void createAndAttachView(int id, FrameLayout frame) {
TextView view = new TextView(this);
view.setText("MostBasicWindow");
view.setBackgroundColor(Color.CYAN);

frame.addView(view);
}

@Override
public StandOutLayoutParams getParams(int id, Window window) {
return new StandOutLayoutParams(id, 200, 150, 100, 100);
}
}