簡體   English   中英

當我使用Intent開始活動時,我的應用程序已停止工作

[英]My application has stopped working when i start activity using intent

當我從另一個活動開始getContact活動時,應用程序已停止。 當我在mainActivity中編寫代碼時,getContact活動工作正常,這意味着不使用意圖將起作用。我也嘗試了很多解決方案,請幫助我。

這是getContact活動

package com.example.myapplication;

import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

public class getContact extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        //Bundle extras=getIntent().getExtras();
        //String name=extras.getString("ContactName");
        //String SenderNum=extras.getString("SenderNum");
        String name="Name";
        String number=get(name,getContact.this);
        Toast.makeText(getApplicationContext(), "Number "+number, Toast.LENGTH_SHORT).show();
    }

    public String get(String name, Context context) {
        String ret=null;
        String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" like'%" + name +"%'";
        String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER};
        Cursor c = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                projection, selection, null, null);
        if (c.moveToFirst()) {
            ret = c.getString(0);
        }
        c.close();
        if(ret==null)
            ret = "Unsaved";
        return ret;
    }
}

我試圖使用另一個活動的以下內容來開始上述活動

 Intent i=new Intent(contactActivity.this,getContact.class);
                startActivity(i);
                finish();

這是我開始活動時logcat的輸出

    --------- beginning of crash
2019-06-12 09:26:17.399 6361-6361/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 6361
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.getContact}: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{386669f 6361:com.example.myapplication/u0a335} (pid=6361, uid=10335) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2723)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2784)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1523)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:163)
        at android.app.ActivityThread.main(ActivityThread.java:6238)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
     Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{386669f 6361:com.example.myapplication/u0a335} (pid=6361, uid=10335) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
        at android.os.Parcel.readException(Parcel.java:1718)
        at android.os.Parcel.readException(Parcel.java:1671)
        at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:4267)
        at android.app.ActivityThread.acquireProvider(ActivityThread.java:5579)
        at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2280)
        at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1533)
        at android.content.ContentResolver.query(ContentResolver.java:518)
        at android.content.ContentResolver.query(ContentResolver.java:475)
        at com.example.myapplication.getContact.get(getContact.java:27)
        at com.example.myapplication.getContact.onCreate(getContact.java:19)
        at android.app.Activity.performCreate(Activity.java:6857)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2676)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2784) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1523) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:163) 
        at android.app.ActivityThread.main(ActivityThread.java:6238) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 

在查看錯誤日志后,它顯示安全異常,我相信未授予權限。

在清單文件中添加以下權限

<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />

此外,如果您將目標定位在Marshamallow以上的設備,則需要考慮授予用戶權限。

 requestPermissions(new String[]{READ_CONTACTS, WRITE_CONTACTS},PERMISSION_REQUEST_CODE);

檢查是否已授予權限

 int result3 = ContextCompat.checkSelfPermission(getApplicationContext(), READ_CONTACTS);
 int result4 = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_CONTACTS);

兩個值都應該為0

您並沒有增加活動的布局。 您的onCreate方法應調用setContentView(R.layout.layout_name)

如果刪除了此行,則添加並顯示應用崩潰時在Logcat中遇到的錯誤。

確保 :

  1. 的setContentView(R.layout.xxxxxxx);
  2. 不要忘記在清單中聲明活動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM