
首先查看项目中是否有buildgradle文件,如果没有的话,先创建一个项目,把创建的项目中buildgradle复制到错误的项目中去,编译,如果还是报错,那就有可能是xml文件出现了错误,我们接下来就是查看xml有没有报错的,然后再 编译,修改其他报错的地方
注意复制的buildgradle不是工程中的,而是项目中的,复制的时候一定要注意,因为在项目和工程中都有buildgradle
文件夹,复制其中编译通过的一个项目中的buildgradle到错误的项目中去就行了,复制过去还有可能报其他的错误,
context是上下文环境,一般是说明你这个在哪个包里面进行的活动还有加载资源值也要用到,你可以先记住有这么一个东西,intent用于页面跳转可指定包名显式跳转,也可以设定参数进行隐式跳转,多用用就知道了,建议自己手打不要光看书
if (BuildVERSIONSDK_INT >= 23) {
int checkCallPhonePermission = ContextCompatcheckSelfPermission(context, androidManifestpermissionREAD_EXTERNAL_STORAGE);
if(checkCallPhonePermission != PackageManagerPERMISSION_GRANTED){
ActivityCompatrequestPermissions((Activity)context,new String[]{androidManifestpermissionREAD_EXTERNAL_STORAGE},223);
return;
}else{
openPhotos();//调用具体方法
}
} else {
openPhotos();//调用具体方法
}
public void openPhotos(){
Intent intent2 = new Intent(IntentACTION_GET_CONTENT);
//Intent intent2 = new Intent(IntentACTION_PICK);
intent2setType("image//");
((Activity)context)startActivityForResult(intent2, TACKPHOTOFLAG_PHOTO);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
//就像onActivityResult一样这个地方就是判断你是从哪来的。
case 223:
if (grantResults[0] == PackageManagerPERMISSION_GRANTED) {
// Permission Granted
openPhotos();
} else {
// Permission Denied
ToastmakeText(YhUploadActivitythis, "很遗憾你把相册权限禁用了。请务必开启相册权限享受我们提供的服务吧。", ToastLENGTH_SHORT)
show();
}
break;
default:
superonRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
1这里把数据放入到intent中,设定传入哪个activity
Intent intent = new Intent();
intentsetClass(context, Ideal_Detail_infoActivityclass);
intentputExtra("name", listget(position)get("name")
toString());
intentputExtra("grade", listget(position)get("grade")
toString());
intentputExtra("depart", listget(position)get("depart")
toString());
thisstartActivity(intent);
2在 Ideal_Detail_infoActivity中接收传过来的intent
Intent intent = getIntent();
String name = intentgetStringExtra("name");
String grade = intentgetStringExtra("grade");
String depart = intentgetStringExtra("depart");
接下来你就可以使用你传过来的数据啦~
求粉!
Android广播机制指的是,在一个应用程序运行的时候可以自定义一个消息类型,让相应的接收器去处理这个消息或者是系统消息,比如来电话了、来短信了、手机没电了等等系统发送的消息。系统发送的消息也可以通过广播的方式通知给应用程序,这样子就避免了新开一个Thread去监听系统或其他应用发送过来的消息的状态。
Android广播的分类:
1、 普通广播:这种广播可以依次传递给各个处理器去处理
2、 有序广播:这种广播在处理器端的处理顺序是按照处理器的不同优先级来区分的,高优先级的处理器会优先截获这个消息,并且可以将这个消息删除
3、 粘性消息:粘性消息在发送后就一直存在于系统的消息容器里面,等待对应的处理器去处理,如果暂时没有处理器处理这个消息则一直在消息容器里面处于等待状态。
注意:普通广播和粘性消息不同被截获,而有序广播是可以被截获的
处理器的注册:
1、 在代码中用函数代码动态的方式注册。动态注册的处理器必须用代码动态的销毁,每次用来处理消息的就一个实例对象
2、 在配置文件里面静态注册,静态注册有个特点,那就是一旦注册就会一直存在于系统里面,无论应用是否关闭或开关机。(简直就是一个流氓软件病毒啊~)。静态注册每次有处理消息就由系统new一个处理器处理,并销毁
下面具体看看Android广播消息的发送、注册、处理过程:
① 自定义处理器类:
public class MyBroadcastReceiver4 extends BroadcastReceiver {
public MyBroadcastReceiver4() {
Systemoutprintln("创建了一个由registerReceiver()注册的广播接收器");
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intentgetAction();
Systemoutprintln("MyBroadcastReceiver4收到了一个" + action + "消息");
if (isOrderedBroadcast()) {
Systemoutprintln("这是一个有序广播,已经被拦截了。");
thisabortBroadcast();
} else {
Systemoutprintln("这不是一个有序广播");
}
Bundle bundle = intentgetExtras();
if (bundle != null) {
Systemoutprintln("该消息携带的数据如下:");
// 获得bundle的一个key的集合
Set set = bundlekeySet();
// 获得上述集合的迭代器
Iterator iterator = setiterator();
// 用迭代器遍历集合
while (iteratorhasNext()) {
// 取得集合中的一个内容
String str = (String) iteratornext();
// 取得Bundle中的内容
Systemoutprintln(str + "--->" + bundleget(str));
}
} else {
Systemoutprintln("该消息没有携带数据");
}
Toast toast = ToastmakeText(context, "MyBroadcastReceiver4收到了一个"
+ action + "消息", ToastLENGTH_LONG);
toastshow();
//将这个消息截获(从消息容器移除)这样其他处理器就没法接收到这个消息
thisabortBroadcast();
}
}
而界面的转跳
Intent intent = new Intent(context,目标Activityclass);
intentsetFlags(IntentFLAG_ACTIVITY_NEW_TASK);
contextstartActivity(intent );
提示: context 是在广播接收者的
public void onReceive(Context context, Intent intent) 方法中获取的
通过主动的方式通知系统我们需要文件列表,要向系统发送广播
sendBroadcast(new Intent(IntentACTION_MEDIA_MOUNTED, Uriparse(“file://”+ EnvironmentgetExternalStorageDirectory())));
然后通过接收器获取系统文列表
public class MediaScannerReceiver extends BroadcastReceiver{
private final static String TAG = ”MediaScannerReceiver”;
@Override
public void onReceive(Context context, Intent intent) {
String action = intentgetAction();
Uri uri = intentgetData();
String externalStoragePath = EnvironmentgetExternalStorageDirectory()getPath();
if (actionequals(IntentACTION_BOOT_COMPLETED)) {
// scan internal storage
scan(context, MediaProviderINTERNAL_VOLUME);
} else {
if (urigetScheme()equals(“file”)) {
// handle intents related to external storage
String path = urigetPath();
if (actionequals(IntentACTION_MEDIA_MOUNTED) &&
externalStoragePathequals(path)) {
scan(context, MediaProviderEXTERNAL_VOLUME);
} else if (actionequals(IntentACTION_MEDIA_SCANNER_SCAN_FILE) &&
path != null && pathstartsWith(externalStoragePath + ”/”)) {
scanFile(context, path);
}
}
}
}
private void scan(Context context, String volume) {
Bundle args = new Bundle();
argsputString(“volume”, volume);
contextstartService(
new Intent(context, MediaScannerServiceclass)putExtras(args));
}
private void scanFile(Context context, String path) {
Bundle args = new Bundle();
argsputString(“filepath”, path);
contextstartService(
new Intent(context, MediaScannerServiceclass)putExtras(args));
}
}
在工具类的构造函数中添加一个Context的参数,并设置一个全局变量Context,这样在某个Activity类中实例化这个工具类的时候就可以将Context对象传过去了,希望对你有帮助!
context其实就是句柄,只不过不像windows一样,每个资源都可以是一个句柄,Android的一个句柄包含了很多全局信息,比如说Activity就是一个句柄。
官方文档的解释是:Context提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被Android系统所提供。它允许获取以应用为特征的资源和类型。同时启动应用级的 *** 作,如启动Activity,broadcasting和接收intents。
以上就是关于Android studio 报错问题全部的内容,包括:Android studio 报错问题、请问,关于安卓广播接收者的问题,安卓中onReceive方法中的参数context和intent、android 获取相册图片,使用Intent.ACTION_GET_CONTENT时,提示java.lang.SecurityException,怎么弄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)