zoukankan      html  css  js  c++  java
  • 花了我一天才解决 郁闷

    如果是从BroadcastReceiver启动一个新的Activity, 不要忘记i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     

     

    private Context mContext;
      
    /** Called when the activity is first created. */
        @Override
        
    public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);
            mContext 
    = this;
    。。。。。。。。。。。。。。。。
    Context字面意思上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过 Context才能识别调用者的实例,比如说Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的实例为Activity,而到了一个button的onClick(View view)等方法时,我们用this时就会报错,所以我们可能使用ActivityName.this来解决,主要原因是因为实现Context的类主要有Android特有的几个模型,Activity、Service以及BroadcastReceiver。

    常规需要Context实例的方法主要有各种Service实现的类,比如说SensorManager在实例化时需要 getSystemService(String)方法就必须由Context的实例执行,还有一些私有的文件系统I/O比如说 openFileInput以及常用的Toast的makeText方法。。。。。
     

    public class MyReceiver extends BroadcastReceiver{

    public static final String action="acc";
     public void onReceive(Context context, Intent intent) {
      Intent i=new Intent(context,Receivered.class);
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      context.startActivity(i);
     }

     
    }

     

     

    1. 指定action 和type
    // SIM import
            Intent importIntent = new Intent(Intent.ACTION_VIEW);
            importIntent.setType("vnd.android.cursor.item/sim-contact");
            importIntent.setClassName("com.android.phone", "com.android.phone.SimContacts");
            menu.add(0, 0, 0, R.string.importFromSim)
                    .setIcon(R.drawable.ic_menu_import_contact)
                    .setIntent(importIntent);
                    
    2. 指定action, data和type
    (1)隐式查找type
    示例代码:
    uri: content://simcontacts/simPeople/(id)
    intent = new Intent("android.intent.action.SIMEDIT",uri);
                startActivity(intent);

    程序会很据data中的uri去查找匹配的type(必须的)            
    provider中的getType()            
    case SIM_PEOPLE_ID:
                return "vnd.android.cursor.item/sim-contact";  

    配置文件中的filter设定           
    AndroidManifest.xml
        <intent-filter>
                    <action android:name="android.intent.action.SIMEDIT" />
                    <category android:name="android.intent.category.DEFAULT" />          
                    <data android:mimeType="vnd.android.cursor.item/sim-contact" />
          </intent-filter>

    也可以自己设定type,但只能使用 setDataAndType()     
          
    3. 其他设定intent的属性方式
       Intent setComponent(ComponentName component)
       Intent setClassName(Context packageContext, String className)
       Intent setClassName(String packageName, String className)
       Intent setClass(Context packageContext, Class<?> cls)
       

    Intent应该算是Android中特有的东西。你可以在Intent中指定程序要执行的动作(比如:view,edit,dial),以及程序执行到该动作时所需要的资料。都指定好后,只要调用startActivity(),Android系统会自动寻找最符合你指定要求的应用程序,并执行该程序。

  • 相关阅读:
    基于SSM框架web搜索功能的实现
    使用APICloud打包webapp
    mac如何运行vue项目
    前端和算法实现:给网站上加上自己的水印(以后用上)
    jQuery常用代码片段
    关于vscode的个人配置
    听说你想用git,安装一下咯
    vue创建项目的一种方法
    用js控制css动画效果@keyframes
    axios的封装和拦截
  • 原文地址:https://www.cnblogs.com/tt_mc/p/1678731.html
Copyright © 2011-2022 走看看