0
点赞
收藏
分享

微信扫一扫

Android笔记一


1、一些文件夹的作用=====================================
res/assets 文件夹放音乐,不会被编译
res/raw 放音乐,会被编译
res/drawable 放图片

2、主Activity声明=====================================
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

3、隐藏标题栏=====================================
在 onCreate()方法中添加如下代码:
requestWindowFeature(Window.FEATURE_NO_TITLE)
标题栏,注意这句代码一定要在 setContentView()之前执行

4、Toast=====================================
public void onClick(View v) {
Toast.makeText(FirstActivity.this, "You clicked Button 1",
Toast.LENGTH_SHORT).show();
}

5、在活动中使用 Menu=====================================

6、播放音乐=====================================

7、销毁一个Activity
两种方式 :第一种 按back键就可以销毁当前活动
第二种代码如下
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});

8、使用 Intent 在活动之间穿梭=====================================
使用显式 Intent
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
}
});
使用隐式 Intent
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
}
});

9、调用系统浏览器=====================================
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
});

10、调用系统拨号界面=====================================
button1.setOnClickListener(new OnClickListener() {
@Override
第 2 章 先从看得到的入手,探究活动
51
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
}
});

11、向下一个活动传递数据=====================================
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);
startActivity(intent);
}
});
下一个活动接收数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.second_layout);
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity", data);
}

12、返回数据给上一个活动=====================================
第一个活动代码
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
}
});
第二个活动代码
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();
}
然后第一个活动获取返回数据重写下面方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Log.d("FirstActivity", returnedData);
}
break;
default:
}
}
13、活动的生命周期
开始运行主活动
依次运行
onCreate
onStart
onResume

然后点击一个按钮跳转到另一个活动(完全盖住主活动)
此时运行
onPause
onStop

然后返回
就会
onRestart
onStart
onResume

再点击另一个按钮弹出框
此时就会
onPause

然后再返回
只有
onResume

最后主活动返回
onPause
onStop
onDestroy

13、活动被回收了怎么办=====================================
如果上一个活动被回收,那么返回上一个活动依然会看见,但是这时
调用的不是onRestart 而是 onCreate 但是这样不能保存数据会影响用户体验
好在有另一个方法可以用来回收前调用保存数据,onSaveInstanceState(Bundle outState)
数据保存在Bundle对象中
那么如何取出Bundle , 就在onCreate(Bundle savedInstanceState)

14、活动的启动模式
standard 默认模式,傻瓜添加模式,该模式系统不会在乎这个活动是否已经在返回栈中存在,启动一次添加一次

singleTop 单栈顶模式,该模式如果当前活动在栈顶就不会再添加了,但是如果不是在栈顶还会添加

singleTask 单活动模式,全栈只出现一次

singleInstance 这个能实现应用程序共享活动 因为它用了特殊的共享返回栈

15、如果R文件丢失=====================================
Build--> Rebuild Project

16、广播的类型==============================

标准广播 完全异步 发出广播之后所有接收器同时接收
有序广播 同步 优先级高的接收器先接收
注意:广播是跨进程的,即一个应用发出的广播,不同的应用都可以接收

17、动态注册广播接收器==============================
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver, intentFilter);
}
最后要记得,动态注册的广播接收器一定都要取消注册才行。

@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}
18、创建广播接收器=====================================
只需要新建一个类, 让它继承自BroadcastReceiver,
并重写父类的 onReceive()方法就行了。 这样当有广播到来时, onReceive()方法就会得到执行,
具体的逻辑就可以在这个方法中处理。
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

Toast.makeText(context, "network changes",
Toast.LENGTH_SHORT).show();
}
}

19、注册静态广播接收器==============================
<receiver android:name=".BootCompleteReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />

</intent-filter>
</receiver>

20、发送自定义广播===================================
一、发送标准广播
先注册一个静态广播接收器
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received in MyBroadcastReceiver",Toast.LENGTH_SHORT).show();
}
}
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.example.broadcasttest.MY_BROADCAST"/>
</intent-filter>
</receiver>

发送广播代码如下
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.broadcasttest.
MY_BROADCAST");
sendBroadcast(intent);
}
});

二、发送有序广播
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.broadcasttest.
MY_BROADCAST");
sendOrderedBroadcast(intent, null);
}
});

更改有序广播先后顺序
<receiver android:name=".MyBroadcastReceiver">
<intent-filter android:priority="100" >
<action android:name="com.example.broadcasttest.MY_BROADCAST"/>
</intent-filter>
</receiver>
可以看到,我们通过 android:priority 属性给广播接收器设置了优先级,优先级比较高的
广播接收器就可以先收到广播。 这里将 MyBroadcastReceiver的优先级设成了 100

三、广播截断
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received in MyBroadcastReceive",
Toast.LENGTH_SHORT).show();
abortBroadcast();
}
}
如果在 onReceive()方法中调用了 abortBroadcast()方法, 就表示将这条广播截断, 后面的
广播接收器将无法再接收到这条广播

21、使用本地广播=====================================
为了能够简单地解决广播的安全性问题,Android 引入了一套本地广播机制,使用这个
机制发出的广播只能够在应用程序的内部进行传递, 并且广播接收器也只能接收来自本应用
程序发出的广播,这样所有的安全性问题就都不存在了。
本地广播的用法并不复杂,主要就是使用了一个 LocalBroadcastManager 来对广播进行
管理,并提供了发送广播和注册广播接收器的方法。
public class MainActivity extends Activity {
private IntentFilter intentFilter;
private LocalReceiver localReceiver;
private LocalBroadcastManager localBroadcastManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
localBroadcastManager = LocalBroadcastManager.getInstance(this);
// 获取实例
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.broadcasttest.
LOCAL_BROADCAST");
localBroadcastManager.sendBroadcast(intent); // 发送本地广播
}
});
intentFilter = new IntentFilter();
intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
localReceiver = new LocalReceiver();
localBroadcastManager.registerReceiver(localReceiver, intentFilter);
// 注册本地广播监听器
}
@Override
protected void onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(localReceiver);
}
class LocalReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received local broadcast",
Toast.LENGTH_SHORT).show();
}
}
}


举报

相关推荐

0 条评论